Цитата:
Итого: дока не причём.
Итого дока как раз причем. Просто в силу неправильного умолчательного значения флажка. Я его, честно говоря, и не заметил. Полнотекстовый поиск обычно делается нечувствительным к регистру, если пользователем не указано обратное. Везде. И это логично. Random или random с т.з. естественного языка -- одно и тоже, слово одно и то же, обозначает одно и то же, просто в одном случае оно находится в начале предложения, а в другом нет, как например в этом предложении.
Цитата:
Даже судя по названию, REAL от 0 до 1. Ещё есть исх. код + ссылка на литературу "Martin Reiser, Niklaus Wirth, Programming In Oberon, ISBN 0201565439".
А что там с названием? Функция: Однообразно(), или Единообразно(). Возвращает вещественный тип. Имеет какое-то отношение к случайным числам. Откуда я должен придумать какой диапазон оно выдаст? Нет, я конечно предположил что от 0 до 1, и основываясь на этом предположении построил алгоритм. Но это же не верно! На базовые функции должна быть документация. Генератор случайных чисел -- базовая функциональность.
Документация должна быть как краткой (вот вам функция, получает то-то выдает то-то), так и подробная включая харакетристики сгенерированых значений. + ссылки на первоисточники. Тут имеем только ссылку на первоисточник + некий невнятный исходник. Мне не интересна реализация! Мне интересна СПЕЦИФИКАЦИЯ модуля! Где, черт возьми, воспеваемая оберонами модульность? Где сокрытие частностей от пользователя модуля? Почему для того чтобы понять как пользоваться модулем я обязан ковыряться в его потрохах?
С ISBN 0201565439 ещё интересней. Т.е. чтобы написать простейший тест, вы предлагаете мне сходить в библиотеку и попробовать взять эту книжку? Или спиратить её откуда-нибудь с сети?
Цитата:
Дружно смеёмся над:
Language Report писал(а):
Assignment compatible...
5. Tv is a numeric type and e is a constant expression whose value is contained in Tv;...
6.1 Basic Types...
Types 4 to 7 are integer types, types 8 and 9 are real types, and together they are called numeric types. They form a hierarchy; the larger type includes (the values of) the smaller type:
REAL >= SHORTREAL >= LONGINT >= INTEGER >= SHORTINT >= BYTE
И? У нас есть массив содержащий переменный типа INTEGER. ENTIER возвращает переменную типа LONGINT.
Код:
ENTIER(x) real type LONGINT largest integer not greater
than x
Arr[i] := ENTIER(r); -- очевидная ошибка компиляции. Т.о. полученый из ENTIER результат требуется привести к типу INTEGER. Посему и получаем замечательную строчку вида:
Код:
Arr[i]:= SHORT(ENTIER(ObxRandom.Uniform()));
Действительно, смешно.
Цитата:
Если Вас эти преобразования не устраивают (хотя не понятно, какая разница для "посмотреть как будет работать реализация алгоритма quick sort на CP" какие там идут преобразования) --
Насчет преобразований типов -- просто покоробило когда писал. Неприятно.
Цитата:
перед Вами исходный код Uniform, где целое z отображается на вещественное [0,1]. Скопируйте и сделайте свою целочисленную функцию z MOD сколькоНадо.
Совет в лучших традициях мейнстримового опенсорса, где фиговую архитектуру и документацию пытаются прикрыть или хотя бы морально оправдать доступностью исходников.