PHP bir float rasgele byte (0-255) dönüştürme?

4 Cevap php

I / dev / urandom rastgele bayt okuma yaşıyorum ve ben / onları dışarı rastgele bir şamandıra yapmak istiyorum. Bunu nasıl yaparım? I Ord () ile bir dizi bayt dönüştürmek, ve 0 ile 255 arasında.

Bu 127 0.5 ve 0 0.0 olduğunu, 255 1.0 olduğu açıktır, ama nasıl kalanını hesaplanır? Ayrıca, ben bir bayt hassas sürü vermek için yeterli olmadığını düşünüyorum? Kaç bayt Bunun için kullanmalıyım?

4 Cevap

Basit doğrusal bir ilişki deneyin

$f = $r / 255.0;

$ r rasgele byte ve $ f rasgele şamandıra olduğu.

Bu şekilde, ne zaman $ r = 255, $ f 1.0 ve when $r=127, $f is 0.498

r = 127 için 0.5 almak için farklı bir ilişki gerektirir.

Umm, sadece sayıların rastgele bir dizisini istiyorsun? Böylece, sadece kullanırsanız http://php.net/mt_rand

$int = mt_rand(0, 1000);
$float = mt_rand(0, 1000) / 1000.0;
$float_more_precise = mt_rand(0, 100000) / 100000.0;

Eğer 127 0.5 olmak istiyorum beri, ben istediğiniz hayal

$float = round($byte/255,1)

Eğer float sunabilir tam hassasiyet istiyorsanız, o zaman 24 bit veya üç bayt gerekir:

$float = ($b1 | ($b2 << 8) | ($b3 << 16)) / (float)(1 << 24);

Bir double 64 bit uzunluğunda yerine float 'nin 32 bit olduğu gerekiyorsa böylece Ancak, PHP'nin belgeleri daha sonra 53 bit gerekir, ayrıntılar üzerinde biraz bulanık.