MathRand()是如何生成数值的?
这在四合院论坛上已经讨论过很多次了。在MathRand这个词上进行搜索,可以得到超过15页的结果
例如,这些主题。
https://www.mql5.com/ru/forum/123337
https://www.mql5.com/ru/forum/111855
- www.mql5.com
请告诉我MathRand()如何取值。
我们能指望MathRand()在所述范围内均匀分布吗?
我前段时间在php中检查了它。
它似乎生成了大量的随机数,然后绘制。
或者你可以,例如,找出相等数字的数量进行粗略估计。
生成几百个数字并将其写入文件,然后至少用Excel绘制图表。
- www.mql5.com
我需要在模糊逻辑算法中随机转移权重
最重要的是不要在任何一个方向上有持续的 "滑移"。
谢谢你的 "哇",当然,在我看来,这是不必要的 ))
关于
"-如果没有足够的 "分辨率 "0...32767,你可以采取MathRand()*MathRand(),-分布不会变得非常 "倾斜 "到某一边"
我错了......。
期望值将转移到范围中间的左边(我怀疑是1/4 * 32768^2,但我不确定任何事情)。
总的来说,我的陈述是错误的
关于
"-如果没有足够的 "分辨率 "0...32767,你可以采取MathRand()*MathRand(),-分布不会变得非常 "倾斜 "到某一边"
我搞错了 ...
期望值将转移到范围中间的左边(我怀疑是1/4 * 32768^2,但我不确定任何事情)。
总的来说,我的陈述是错误的。
hmlo d-range [0, (2^rstep)-1] 。
long ranD(int rstep) { long div=1; long r=0; for(int i=1;i<=rstep;i++) { if(MathRand()+1>16383.5){if(i==1){r=1;}else{r+=div;}} div=div*2; } return(r); }
你可以用int或double或ulong来代替long。
胶水。
rstep [0, 2^rstep-1] - 我不明白这个参数是什么。
问题。
我需要随机地改变一个双倍变量,准确度可以达到小数点后第8位。
MathRand()/32768将给出一个0.00003的步长--不够。
如何用MathRand()得到一个离散度为0.00000001的在(0...1)的均匀分布的随机值?
at rsign=1 (-1,1) at rsign=0 (0,1)
double ranD(int rsign,int rstep) { double div=2; double r=0; for(int i=1;i<=rstep;i++) { if(MathRand()+1>16383.5){r+=1/div;} div=div*2; } if(rsign==1) { r=2*r-1; } return(r); }
rstep是一个程度。
请告诉我MathRand() 如何取值。
我们能指望MathRand()在所述范围内均匀分布吗?