fortran程序改错:请问下面两个程序的结果为什么会不一样啊?

programmainreal(kind=8)::a,ba=8.0b=a**(1.0/3.0)write(*,*)bstopend另个:programmainreal(k... program main
real(kind=8)::a,b
a=8.0
b=a**(1.0/3.0)
write(*,*) b
stop
end
另个:
program main
real(kind=8)::a,b
a=8.0
b=8.0**(1.0/3.0)
write(*,*) b
stop
end
展开
 我来答
天河流纹石
2013-10-10 · TA获得超过1.3万个赞
知道大有可为答主
回答量:7624
采纳率:76%
帮助的人:4049万
展开全部
请楼主注意,不止变量有精度,常量也有精度!!
8.0 1.0 3.0
都是单精度的常量。

单精度与单精度计算,误差一致。
单精度与双精度计算,就存在转换误差。

program main
real(kind=8)::a,b
a=8.0 !// a 是双精度,但 8.0 是单精度
b=a**(1.0/3.0) !// 双精度a与单精度1.0/3.0计算,计算过程中有转换差距。
write(*,*) b
stop
end
另个:
program main
real(kind=8)::a,b
a=8.0 !// a 是双精度,但 8.0 是单精度
b=8.0**(1.0/3.0) !// 单精度8.0与单精度1.0/3.0计算,计算结果的误差是一致的。计算完毕后再转换为双精度,存入 b 中,所以误差较小。
write(*,*) b
stop
end

实际上,对于你的程序,我建议修改如下(常量也用双精度!)
program main
real(kind=8)::a,b
a=8.0D0
b=a**(1.0D0/3.0D0)
write(*,*) b
stop
end

program main
real(kind=8)::a,b
a=8.0D0
b=8.0D0**(1.0D0/3.0D0)
write(*,*) b
stop
end
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式