首页 > 解决方案 > Fortran 精度默认值,带/不带编译器标志

问题描述

我在 Fortran 中常量数字的精度有问题。

我是否需要写每个0.10.1d0具有双精度?我知道编译器有一个标志,比如-fdefault-real-8在 gfortran 中可以解决这类问题。这会是一种便携且可靠的方式吗?我如何检查标志选项是否真的适用于我的代码?

我在我的 Python 代码中使用 F2py 调用 Fortran 代码,即使我给出了一个未指定的标志,它也不会报告错误,这就是我担心的问题。

标签: fortran

解决方案


在 Fortran 程序1.0中,始终是默认的实数常量,并且1.0d0始终是双精度常量。

但是,“双精度”在不同的上下文中意味着不同的东西。

在 Fortran 上下文中,“双精度”是指一种特定类型的实数,它比默认的实数类型具有更高的精度。在更一般的通信中,“双精度”通常被认为是一种特定的真实类型的 64 位,它与 IEEE 浮点规范相匹配。

gfortran 的编译器标志-fdefault-real-8意味着默认实数占用 8 个字节,并且很可能是编译器用来表示 IEEE 双精度的那个。

因此,1.0是一个默认的实数常量,而不是双精度常量,但默认实数可能恰好与 IEEE 双精度相同。

这样的问题反映了字面常量中精度的含义。对于任何向我询问有关标志的建议的人,-fdefault-real-8我会说要避免它们。


推荐阅读