|
|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
原帖由 chyj0588 于 2009-3-2 18:59 发表 
假设数在A1,则 =$A$1+(RAND()-RAND())*0.6 往下拉 ,就会求出A1在 0.6±0.6范围的随即数 。
这个做法是错误的, 这等于说 rand()-rand() 可以生成均匀的 -1到1的随机数
假设我要得到 >0.5 的概率, 显然此概率应该是 25%
rand() - rand() 的概率是
第一个rand() 必须在0.5到1, 即0.75加减0.25 之间, 且 第二个rand() 必须在0到0.5, 即0.25加减0.25 的范围, 这个概率也有 25%
但是
第一个rand()取 0.75减0.25的时候, 第二个rand()只能取 0.25减0.25
第一个rand()取 0.75加0.25的时候, 第二个rand()只能取 0.25加0.25
所以 rand()-rand() 大于0.5的概率只有12.5%
不信可以用随机试验验证.
实际上, 大家最好牢牢记住, 生成 某一范围的随机数的正确方法, 就是
rand() * ( 上限 - 下限 ) + 下限 (上限,下限可以是任意实数, 上限大于下限)
不要别出心裁了, 很容易犯错还看不出来的.
[ 本帖最后由 灰袍法师 于 2009-3-3 17:48 编辑 ] |
|