Изменить:. Так что в основном то, что я пытаюсь написать, это хэш 1 бит для double
.
Я хочу сопоставить double
с true
или false
с вероятностью 50/50. Для этого я написал код, который выбирает некоторые случайные числа (как пример, я хочу использовать это на данных с регулярностью и все равно получить результат 50/50), проверяет их последний бит и увеличивает y
, если он равен 1, или n
, если оно равно 0.
Однако этот код постоянно приводит к 25% y
и 75% n
. Почему это не 50/50? И почему такое странное, но прямолинейное (1/3) распределение?
public class DoubleToBoolean {
@Test
public void test() {
int y = 0;
int n = 0;
Random r = new Random();
for (int i = 0; i < 1000000; i++) {
double randomValue = r.nextDouble();
long lastBit = Double.doubleToLongBits(randomValue) & 1;
if (lastBit == 1) {
y++;
} else {
n++;
}
}
System.out.println(y + " " + n);
}
}
Пример вывода:
250167 749833