24小时热门版块排行榜    

查看: 1677  |  回复: 1

astringent

铜虫 (著名写手)

[交流] 【求助】fortran中有效位数的问题 已有1人参与

对于下面的程序,为什么用gfortran和compaq visual fortran执行的结果不一致呢?
program main
implicit none
integer ::max=6485,min=9614
real avgmax,avgmin,avgsum

integer::npoints=5000
integer sum
sum=max+min
avgmax=real(max)/real(npoints)
avgmin=real(min)/real(npoints)
avgsum=real(sum)/real(npoints)
write(*,*)max,min,sum
write(*,*)avgmax,avgmin,avgsum
end
我用compaq visual fortran执行的结果和手算的结果一样为:
6485,9614,16099
1.297000    1.922800   3.219800
但是当我用gfortran执行时,结果为:
6485,9614,16099
1.2970001    1.9227999   3.219800
我现在的问题是,为什么会出现这样的现象?虽然各家编译器有差别,但是gfortran给出的结果明显是错误的啊?应该怎样解决?请大家不吝赐教。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+2):谢谢参与应助! 2011-01-07 11:20:10
gfortran 的结果哪里错了呢?浮点运算不就是这个样子的吗?

你把最后一个 write 改成:

write(*,'(3F10.6)')  avgmax,avgmin,avgsum

你再看结果是不是一样的?
2楼2011-01-06 11:25:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 astringent 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见