我在我的javascript代码中使用线性指数生成器,但现在我需要验证结果服务器端(从同一种子生成相同的数字)。我已经在PHP中翻译了我的javascript代码,但它没有按预期工作。前几个数字接近于javascript,但精度较低,序列包含一些负数,这些数字在javascript版本中不存在。我认为这是因为PHP有不同的浮点精度,但我对负数感到困惑。
如果在PHP中没有简单的方法可以使用其他方法在javascript和PHP中生成相同的伪随机数序列吗?
的Javascript
function SeededRandom(newSeed) {
this.seed = newSeed;
this.Random = function (min, max) {
this.seed = (this.seed * 9301 + 49297) % 233280;
return Math.floor(min + (this.seed / 233280) * (max - min + 1));
}
}
PHP
class SeededRandom {
private $seed;
public function __construct($newSeed) {
$this->seed = $newSeed;
}
public function Random($min, $max) {
$this->seed = ($this->seed * 9301 + 49297) % 233280;
return floor($min + ($this->seed / 233280) * ($max - $min + 1));
}
}
答案 0 :(得分:0)
知道了!使用这些数字,它可以在javascript和PHP中使用。
function SeededRandom2(newSeed) {
this.seed = newSeed;
this.Random = function () {
this.seed = (this.seed * 20077 + 12345) % 32768;
return this.seed;
}
}
负数可能是由整数溢出引起的,javascript和PHP数字之间的差异是由除法引起的。
我在这个问题的答案中找到了这个版本:Was there a a time when PHP's rand() function was used as an exploit?