我正在寻找一种使用
PHP生成大量随机数的方法,如:
mt_rand($lower,$upper);
我看到的越接近是gmp_random(),但是它不允许我指定下边界和上边界只有每个肢体的位数(我不知道是什么).
编辑:Axsuuls的答案似乎非常接近我想要的,非常类似于gmp_random,但似乎只有一个缺陷在一种情况.
假设我不会得到一个随机数:
> 1225468798745475454898787465154
和:
> 1225468798745475454898787465200
所以如果这个函数叫做BigRandomNumber():
BigRandomNumber($length = 31);
这可以很容易地返回到指定边界之外的9999999999999999999999999999999.
如何使用最小/最大边界而不是长度值?
BigRandomNumber('1225468798745475454898787465154','1225468798745475454898787465200');
这应该返回一个随机数1225468798745475454898787465 [154 .. 200].
为了参考,我认为解决方案可能需要利用function supplied in this question.
编辑:上面的帖子被删除,这里是:
function compare($number1,$operator,$number2) { $x = bccomp($number1,$number2); switch($operator) { case '<': return -1===$x; case '>': return 1===$x; case '=': case '==': case '===': return 0===$x; case '!=': case '!==': case '<>': return 0!==$x; } }
尝试以下:
function BigRandomNumber($min,$max) { $difference = bcadd(bcsub($max,$min),1); $rand_percent = bcdiv(mt_rand(),mt_getrandmax(),8); // 0 - 1.0 return bcadd($min,bcmul($difference,$rand_percent,8),0); }
数学如下:将最小值和最大值之间的差乘以随机百分比,并将其加到最小值(使用四舍五入到int).