VB 题目 int(rnd*(-7)+4)*int(rnd*5-10) 随机数产生的范围。 为什么答案是【-30,18】而不是【-40,18】

高分。。。... 高分。。。 展开
 我来答
tf日出
2013-05-09 · TA获得超过1077个赞
知道小有建树答主
回答量:648
采纳率:0%
帮助的人:262万
展开全部
好像两个答案都不对吧!

rnd: [0,1)
rnd*(-7): (-7,0]
rnd*(-7)+4: (-3,4]
int(rnd*(-7)+4)* : [-3,4]之间的整数,但取值为4的概率极小,仅当rnd取0时才会出现,理论概率为1/8388608

rnd*5: [0,5)
rnd*5-10: [-10,-5)
int(rnd*5-10):[-10,-6]之间的整数。

int(rnd*(-7)+4)*int(rnd*5-10):所以理论上,[-40,30]之间的部分整数
注:(-3)*(-10)=30是最大数啊,为什么两个答案都是18?

但实际上rnd函数并非一个真正的随机数字,而是一个周期为8388608(即2^23)的序列,当第一个rnd取值为0,第二个rnd必然取值为0.7641413,此时表达式的值为-28。
实际的取值范围是:-30、-28*、-27、-24、-21、-20、-18*、-16、-14、-12、-10、-9、-8、-7、-6、0*、6、7、8、9、10、12、14、16、18*、20、21、24、27、30。
其中:
-28:出现的概率极低,约为1/8388608
-18、18:出现的概率约为2/35
0:出现的概率约为1/7
其余未标注数字:出现的概率约为1/35

附:实测数据:进行50331648次测试,以上各值出现的次数:
a(-30) =1438024
a(-28) =4
a(-27) =1438034
a(-24) =1438088
a(-21) =1438072
a(-20) =1438088
a(-18) =2876062
a(-16) =1438030
a(-14) =1438020
a(-12) =1438052
a(-10) =1438030
a(-9) =1438022
a(-8) =1438056
a(-7) =1438072
a(-6) =1438054
a(0) =7190236
a(6) =1438078
a(7) =1438076
a(8) =1438020
a(9) =1438026
a(10) =1438034
a(12) =1438024
a(14) =1438032
a(16) =1438072
a(18) =2876162
a(20) =1438020
a(21) =1438038
a(24) =1438014
a(27) =1438028
a(30) =1438080
chinaboyzyq
2013-05-08 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:3299万
展开全部
msdn上说:
Rnd函数返回小于 1 但大于或等于 0 的值。

以下程序测试,证明Int(Rnd * (-7) + 4)有等4的时候:
Private Sub Command1_Click()
While Int(Rnd * (-7) + 4) <> 4
DoEvents
Wend
MsgBox ""
End Sub
那么也就是说int(rnd*5-10)有等于-10的时候,最后的结论是【-40,18】才是正确的,不知道你从哪找来的破书,哪个二百五作者给出的答案。(不会是你们老师给出的答案吧,真是害死人。)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沙慧月03
2013-05-08 · TA获得超过2157个赞
知道大有可为答主
回答量:2717
采纳率:100%
帮助的人:3634万
展开全部
int(rnd*5-10)产生数的范围为【6,-10】,这没问题
但是int(rnd*(-7)+4)产生数的范围应该是【-3,3】,这是因为
rnd*(-7)返回的是(-7,0)之间的数,注意:返回值肯定是负值!
故rnd*(-7)+4返回值的范围(-3,4),注意没有包含4 哦!
即值范围就是 -2点多到+3点多之间
int函数是返回不大于number 的最大整数,
加上int函数后,值范围就是【-3,3】

所以答案是【-30,18】
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
牛人影视
2013-05-07 · TA获得超过1395个赞
知道大有可为答主
回答量:1491
采纳率:0%
帮助的人:1617万
展开全部
因为 rnd*(-7)+4 的范围是 3.xxxx ~ -2.xxxx
所以 inr(rnd*(-7)+4)的范围是 3 ~ -2

因为 rnd*5-10 的范围是 -9.xxxx ~ -5.xxxx
所以 int(rnd*5-10) 的范围是 -9 ~ -5

这样就很容易得到 (3,-2)和(-9,-5)交叉相乘的最小数是 -9*3 = -27
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式