Tôi đang cố gắng tạo ra các phao ngẫu nhiên bằng cách sử dụng không có gì nhưng byte tôi nhận được từ/dev/urandom. Hiện tại, ý tưởng tốt nhất của tôi là để có được độ chính xác nền tảng như sau:Làm thế nào để thực hiện một hàm float ngẫu nhiên để nó không bị mất entropy? (PHP)
$maximumPrecision = strlen('' . 1/3) - 2;
và sau đó xây dựng một chuỗi 0-9 trong vòng lặp số lần $ maximumPrecision cho chúng tôi biết. Đối với examle, nếu độ chính xác là 12, tôi sẽ tạo ra 12 số ngẫu nhiên và nối chúng. Tôi nghĩ đó là một ý tưởng tồi tệ.
Cập nhật: Điều này có hợp lý không?
$bytes =getRandomBytes(7); // Just a function that returns random bytes.
$bytes[6] = $bytes[6] & chr(15); // Get rid off the other half
$bytes .= chr(0); // Add a null byte
$parts = unpack('V2', $bytes);
$number = $parts[1] + pow(2.0, 32) * $parts[2];
$number /= pow(2.0, 52);
Số phải nằm trong khoảng từ 0 đến 1? – kennytm
Có, một phao giữa 0 và 1 với độ chính xác của nền tảng. – Tower
http://www.php.net/manual/de/function.rand.php#75794 – halfdan