VB——单精度问题
fori=1to10an=int(rnd*1000)nexti我对这一小段程序的理解为:rnd时产生一个0到1之间的单精度,既然是单精度,字节数是不是就确定了?书上写的单...
for i= 1 to 10
an=int(rnd*1000)
next i
我对这一小段程序的理解为:rnd 时产生一个0到1之间的单精度,既然是单精度,字节数是不是就确定了?书上写的单精度(浮点)为四字节。那不就是只能为小数点后只有两位例如:0.12 ?因为数字各占一个字节?
然后产生一个0到1000之间随机数?
希望大家给我详细点的解释,谢谢啊! 展开
an=int(rnd*1000)
next i
我对这一小段程序的理解为:rnd 时产生一个0到1之间的单精度,既然是单精度,字节数是不是就确定了?书上写的单精度(浮点)为四字节。那不就是只能为小数点后只有两位例如:0.12 ?因为数字各占一个字节?
然后产生一个0到1000之间随机数?
希望大家给我详细点的解释,谢谢啊! 展开
2个回答
2013-10-26
展开全部
单精度4个字节,但不是文本存储为4个字节,存储原理如下
单精度浮点数的存储格式
符号 指数 尾数
|S| E | M |
31| 30 23| 22 0 ←位序号
其代表的真实的数值为 (-1)S*2e*m 其中e,m分别为E,M对应的实际数值,而E,M仅仅是一串二进制位。
符号位S(sign) - 1bit
0代表正号,1代表负号。(+0、-0视为相同?(欢迎补充资料))
指数位E(exponent) - 8bit
E的取值范围为0-255(无符号整数),实际数值e=E-127。
有时E也称为“移码”,或不恰当的称为“阶码”(阶码实际应为e)
尾数位M(mantissa) - 23bit
M也叫有效数字位(sinificand)、系数位(coefficient), 甚至被称作“小数”。
在一般情况下,m=(1.M)2,使得实际起作用范围为1≤尾数<2。
所以单精度小数最多可以有23bit,相当于小数点后7位小数。
数字存储可不是文本的
你的这个程序是把上面的最多7位小数,0<这个7位小数<1,乘以1000以后就是0<rnd*1000<1000,然后取整
最后得到的就是10个0-1000之间的随机数
单精度浮点数的存储格式
符号 指数 尾数
|S| E | M |
31| 30 23| 22 0 ←位序号
其代表的真实的数值为 (-1)S*2e*m 其中e,m分别为E,M对应的实际数值,而E,M仅仅是一串二进制位。
符号位S(sign) - 1bit
0代表正号,1代表负号。(+0、-0视为相同?(欢迎补充资料))
指数位E(exponent) - 8bit
E的取值范围为0-255(无符号整数),实际数值e=E-127。
有时E也称为“移码”,或不恰当的称为“阶码”(阶码实际应为e)
尾数位M(mantissa) - 23bit
M也叫有效数字位(sinificand)、系数位(coefficient), 甚至被称作“小数”。
在一般情况下,m=(1.M)2,使得实际起作用范围为1≤尾数<2。
所以单精度小数最多可以有23bit,相当于小数点后7位小数。
数字存储可不是文本的
你的这个程序是把上面的最多7位小数,0<这个7位小数<1,乘以1000以后就是0<rnd*1000<1000,然后取整
最后得到的就是10个0-1000之间的随机数
2013-10-26
展开全部
既然rnd是参数0到1的随机数 那这个循环就是产生10个0到1000的随机数 int强转是把单精度 也就是小数点后面的值给损失掉了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询