:: Не фоксом единым
Где-то уже это видел. Баг Фортрана генерации случайных чисел
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
Ratings: 0 negative/0 positive
Re: Где-то уже это видел. Баг Фортрана генерации случайных чисел
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
надо проверять

Володя! Ты Что хочешь "выяснить" \\\\\\\\\\\\\\\\\?
Ratings: 0 negative/0 positive
Re: Где-то уже это видел. Баг Фортрана генерации случайных чисел
boba
Автор

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Найти причину. У меня и еще на 5 проверенных компьютерах бага нет,
а на 4 есть.
С версией винды не коррелирует.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 8 (Гостей: 8)

© 2000-2024 Fox Club 
Яндекс.Метрика