• Source
    1. <?php
    2. error_reporting(-1);
    3. function to32bit($t) {
    4. return(gmp_and($t,"0xffffffff"));
    5. }
    6.  
    7. function gmp_shiftl($y,$n) {
    8. return(gmp_mul($y,gmp_pow(2,$n)));
    9. }
    10.  
    11. function gmp_shiftr($y,$n) {
    12. return(gmp_div($y,gmp_pow(2,$n)));
    13. }
    14.  
    15.  
    16. $MathExpectation = gmp_init(0);
    17. $Dispersion = gmp_init(0);
    18. $AverageSquareDifference = gmp_init(0);
    19. $P = 10;
    20.  
    21. for ($i=1 ; $i <= $P; $i++) {
    22. $x = gmp_init(mt_rand(120000000,123456789));
    23. $y = gmp_init(mt_rand(360000000,362436000));
    24. $z = gmp_init(mt_rand(510000000,521288629));
    25. $c = gmp_init(mt_rand(7600000,7654321));
    26.  
    27.  
    28. $x = to32bit(gmp_add(gmp_mul("69069",$x),"12345")); // Линейный конгруэнтный метод Xn+1 = (aXn +c)
    29. $y = to32bit(gmp_xor($y,gmp_shiftl($y,13))); // Xor-shift начало
    30. $y = to32bit(gmp_xor($y,gmp_shiftr($y,17)));
    31. $y = to32bit(gmp_xor($y,gmp_shiftl($y,5))); // Xor-shift конец
    32.  
    33. $t = to32bit(gmp_add(gmp_mul("698769069",$z),$c));
    34. $c = to32bit(gmp_shiftr($t,32));
    35. $z = $t;
    36.  
    37. $result = to32bit(gmp_add(gmp_add($x,$y),$z));
    38.  
    39. $result = gmp_init($M);
    40.  
    41. $MathExpectation = gmp_add($MathExpectation,$M);
    42.  
    43. echo $i . "|" . gmp_strval($result) . "<br></br>\n";
    44. };
    45.  
    46. $MathExpectation = gmp_div($MathExpectation,$P);
    47.  
    48. echo "<br> Математическое ожидание: {$MathExpectation} </br>";
    49. echo "<br> Среднеквадратическое отклонение: {$AverageSquareDifference} </br>";
    50. echo "<br> Дисперсия: {$Dispersion} </br>";
    51. ?>