gpt4 book ai didi

fortran - 为什么在 Fortran 中使用 REAL 类型值作为 do-loop 控制变量时输出很奇怪?

转载 作者:行者123 更新时间:2023-12-02 17:02:09 24 4
gpt4 key购买 nike

当我用 Fortran 语言编码时,我发现当我在 do-loop 中将 REAL 值设置为 control-var 时,输出很奇怪,例如:

do i=0.1,1.0,0.1
write (13,"(F15.6)") i
end do

输出为:0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0。但是当我将起始值设置为0.6时:

do i=0.6,1.0,0.1
write (13,"(F15.6)") i
end do

输出为:0.6,0.7,0.8,0.9,不输出1.0。为什么会出现这种情况?

最佳答案

这基本上是一个舍入问题,请参阅 Precision problems of real numbers in Fortran以及从那里开始的链接。比较两个浮点是很棘手的,并且它不能很好地与 do 循环一起使用。

您应该打印更多的十进制数字,而不仅仅是 6:

   0.1000000015
0.2000000030
0.3000000119
0.4000000060
0.5000000000
0.6000000238
0.7000000477
0.8000000715
0.9000000954
1.0000001192

这些值不精确。

在 Fortran 中,迭代次数是在开始循环之前计算的。当您计算循环行程计数时:

write (*,"(F15.10)") (1.0 - 0.1) / 0.1

write (*,"(F15.10)") (1.0 - 0.6) / 0.1

您将得到:

   9.0000000000
3.9999997616

因此后一个只会迭代四次(3 + 1 = 4;因此 i = 0.6、0.7、0.8 和 0.9),因为计数从 3.999... 截断为 3。

出于充分的原因,实际循环计数器已从 Fortran 中删除,请勿使用它们。舍入是问题之一。编译器应该警告您:

Warning: Deleted feature: Start expression in DO loop at (1) must be integer

此外,将 real 变量命名为 i 应该是犯罪行为。

关于fortran - 为什么在 Fortran 中使用 REAL 类型值作为 do-loop 控制变量时输出很奇怪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43178395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com