打印常数0.8804418
Fortran 语言
program hello
print *, 0.8804418
end program hello
给出0.880441785
而C版本
#include <stdio.h>
int main() {
printf("%.10g", 0.8804418);
}
打印0.8804418
在同一系统上(带有 gfortran 和 gcc 的 Linux x86-64)。为什么输出不同?请注意,增加 printf
中的精度不改变输出。
这不是 Is floating point math broken? 的重复项或类似的。这个问题具体是关于 Fortran 和 C 表示(或格式)的差异。
最佳答案
默认情况下,Fortran 的 REAL
数字常量是单精度;然而,在 C 中,浮点文字具有双精度。
当您翻译0.8804418
时转换为单精度,然后将其打印为 double
在C中,你得到0.8804417849
打印 ( demo )
float x = 0.8804418f;
printf("%.10g\n", x);
Fortran 的打印输出似乎是向上舍入的相同数字。
Fortran double 语法 REAL
数字使用后缀 d
:
print *, 0.8804418d+0
这会打印 0.88044180000000005
(demo)。
关于c - 为什么相同的浮点常量在 Fortran 和 C 中打印不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36923963/