24小时热门版块排行榜    

查看: 613  |  回复: 2

liming9398

金虫 (正式写手)

[求助] 浮点数存储误差的疑问

cvf6.6 中,定义real :: a
                          a = 0.24
                          write (*,*)  a
                      输出结果为0.2400000
                         如果定义real (8 ) a
                                       a = 0.24
                                       write (*,*) a, 结果为0.239999994635582
                   双精度的反而不如单精度的准确了怎么回事呢?
还有有人说3.*(1./3.) == 1. 这个结果为f,我测了测怎么是t呢?
在上述a的两种定义中,如果分别把1./3.赋值给a,4个字节的结果是0.3333333
而8个字节的结果是0.333333343267411,每种情况和3相乘都不是1啊,为什么就相等呢??
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
如果定义real (8 ) a,那么你下面的赋值方式是错的
                                       a = 0.24
你应该用
a=0.24d0
然后你再看看 write(*,*) a 的结果是啥?
2楼2012-03-31 09:24:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

q1036210267

木虫 (正式写手)

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
liming9398: 金币+3, 有帮助 2012-04-25 20:03:33
双精度比单精度 准确的多,单精度保存数据是6-7位,而双精度高达15位,楼主出现情况和你对数据的定义有关。例如单精度你可以写成2.4e-1,而双精度可写成2.4d-1,你也可以用输出格式来实现 你想要的结果  f4.2
生活中坚持快乐的原则不改变,学习工作中踏实上进!`~`
3楼2012-04-24 09:10:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 liming9398 的主题更新
信息提示
请填处理意见