Где-то уже это видел. Баг Фортрана генерации случайных чисел | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Коллега обнаружил у себя на компьютере,
прислал тестировать У меня не подтвердился. ______________ cccccccccccccccc REAL*4 URAND ccccccccccccccccc c Обертка к ФОРТРАН-генератору случайных чисел, чтобы не писать USE ... c c в функциях-пользователях генератора и не думать там про его инициализацию. c c Генератор инициализируется от таймера при первом вызове. c c Возвращает равномерно распределенное случайное число в диапазоне (0..1). c c...............................................................................c real*4 function urand() USE IFPORT; USE IFCORE ! базовые модули языка USE HEADERS ! глобальные переменные и интерфейсы, в т.ч. строка dos_line integer*4, save :: iy=0 ! iy - статическая переменная, сохраняется между вызовами, инициализируется один раз real*4 :: r ! tmp- переменная для баг-трекинга c c Инициализация генератора случайным числом (только 1 раз при самом первом вызове): if (iy == 0) call seed(RND$TIMESEED); iy=1 c 100 call random(r); ! r должно быть значением от 0 до 1, но ФАКТ: ИЗРЕДКА СЮДА ВОЗВРАЩАЕТСЯ r=NAN ?!?! if (isNaN(r)) then ! Согласно справке фортрана, условие не должно выполняться НИКОГДА, но.... dos_line=' Random='; call r4_to_bit(r,dos_line(11:42)) ! Запись R4 в строку dos_line в виде 32-битной маски call append(r); call append_history() ! Запись R4 в строку dos_line в виде real-числа и дамп goto 100 end if urand = r ! Возвращаемое значение функции. Кто бы мог подумать, что его надо проверять... end Фрагмент дампа после примерно 100 000 000 вызовов URAND(): ************************ 2021:09:24 00:58:33 ************************ Random= 11111111110000000000000000000000 NaN Random= 11111111110000000000000000000000 NaN Random= 11111111110000000000000000000000 NaN Random= 11111111110000000000000000000000 NaN Random= 11111111110000000000000000000000 NaN Random= 11111111110000000000000000000000 NaN Для сравнения: R=1.00 = 00111111100000000000000000000000 1.00000 |
Re: Где-то уже это видел. Баг Фортрана генерации случайных чисел | |
---|---|
of63 Сообщений: 25867 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
надо проверять
Володя! Ты Что хочешь "выяснить" \\\\\\\\\\\\\\\\\? |
Re: Где-то уже это видел. Баг Фортрана генерации случайных чисел | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Найти причину. У меня и еще на 5 проверенных компьютерах бага нет,
а на 4 есть. С версией винды не коррелирует. |
© 2000-2025 Fox Club  |