
Сообщение от
capzap
тогда вопрос, сколько байт тестируют тесты nist? И когда Вы скармливаете оскатовский вариант, который честно разбрасывает числа по всему четырехбайтовому диапазону, не получается ли что тест выкидывает из обращения утрированно 25% чисел, хотя это старший байт и я не знаю сколько чисел "округляется" может поэтому
nist тесты тестируют 1 бит.
Вот как я использовал OSCAT'овский генератор для тестов nist:
Код:
float rdm = oscat_next();
if ( rdm < 0.5 )
bit = 0;
num_0s++;
}
else {
bit = 1;
num_1s++;
}
mask /= 2;
bitsRead++;
epsilon[i] = bit; // <-- этот массив потом проверяется в тестах nist
Т.е. от каждого вызова OSCAT генератора я тестировал лишь один бит.
Такой подход (использование только одного бита из всего float'а) используется в базовом примере nist теста -- lcg генератор генерирует double, и использует из него один-единственный бит.
Поэтому:
1) Считаю, что из OSCAT генератора использовалось максимально возможное количество бит
2) Возможно, OSCAT'овский генератор нужно ещё как-то проверять. Например, если OSCAT возвращает всегда либо 0 либо 0.99, то мой тест это не заметит (он же только с 0.5 сравнивает). Можно попробовать умножить результат OSCAT'а на 224 и использовать несколько бит оттуда.
Но, раз уж тест с <0.5 не работает, то нужно ли проверять больше бит?