может я недосыпаю, но почему-то показалось что в fpc-2.4.0.x86_64-linux функция Random генерирует случайное число из (0;1], тогда как обычно принято из [0;1), или я ошибаюсь?
свободный страннык
|
20.03.2010 02:29:49
может я недосыпаю, но почему-то показалось что в fpc-2.4.0.x86_64-linux функция Random генерирует случайное число из (0;1], тогда как обычно принято из [0;1), или я ошибаюсь?
свободный страннык
|
|
|
|
|
|
20.03.2010 02:52:47
с чего вы делаете такой вывод?
Я вот вижу, что в ф-ции random: extended число типа cardinal (макс. значение $FFFFFFFF) делится на (1 shl 32), что на единицу больше, поэтому результат не может быть равен единице.
пока ты не доволен жизнью - она проходит...
|
|
|
|
|
|
21.03.2010 16:15:56
Как известно, функция ln не определена в нуле.
При достаточно большом количестве итераций в строке ln(1-Random) или ln(Random) появляется «Runtime error 200». Из чего можно сделать вывод, что Random включает как 0 так и 1. Однако, дело может быть и в типе переменных. Например, Random – Extended, а ln пределена для Single
свободный страннык
|
|
|
|
|
|
21.03.2010 16:38:17
выдает: 2.3283064365386963E-0010 -2.2180709777918250E+0001 т.е. вроде как все в ожидаемых пределах, только на компиляторе 2.5.1 из svn покажи свой код, попробуем разобраться.
пока ты не доволен жизнью - она проходит...
|
|||
|
|
|
|
21.03.2010 17:12:52
Выяснил, что проблема в несогласованности типа переменных. Действительно, function ln(d: double) : double, a function Random : extended. Поэтому в ln(1-Random) под ln может оказаться ноль в «double измерении»
свободный страннык
|
|
|
|
|
|
21.03.2010 17:24:51
попробуйте как один из вариантов выхода поставить проверку на ноль. Может это не оптимальный выход, но вроде должно заработать.
пока ты не доволен жизнью - она проходит...
|
|
|
|
|
|
22.03.2010 01:26:17
если бы extended превращались в double, проблема вроде не должна возникать, но поскольку этого не происходит получается проблема
a9d, проверку сделал вроде всё норм, работает
свободный страннык
|
|
|
|
|
|
22.03.2010 01:39:37
Ну вот, оказывается все уже давным-давно исправлено, проблема существовала со времен 2.2.4, только исправление почему-то не попало в релиз 2.4.0. Думаю это всё объясняет, я тестировал на 2.5.1 поэтому у меня и работало нормально.
пока ты не доволен жизнью - она проходит...
|
|
|
|
|
|
22.03.2010 02:03:39
a9d, большое спасибо за помощь, действительно всё в точности как вы описали, исправил свою программу теперь всё работает в лучшем виде
свободный страннык
|
||||
|
|
|
|||
Наши проекты: Turbo Pascal(tpdn.ru)
При поддержке кафедры Информационных Компьютерных Технологий РХТУ им. Д.И. Менделеева
© 2009–2012 Russian Pascal Development Network.
Техническая площадка: ISBIZ Хостинг