fortran - Fortran 精度默认值,带/不带编译器标志
问题描述
我在 Fortran 中常量数字的精度有问题。
我是否需要写每个0.1
都0.1d0
具有双精度?我知道编译器有一个标志,比如-fdefault-real-8
在 gfortran 中可以解决这类问题。这会是一种便携且可靠的方式吗?我如何检查标志选项是否真的适用于我的代码?
我在我的 Python 代码中使用 F2py 调用 Fortran 代码,即使我给出了一个未指定的标志,它也不会报告错误,这就是我担心的问题。
解决方案
在 Fortran 程序1.0
中,始终是默认的实数常量,并且1.0d0
始终是双精度常量。
但是,“双精度”在不同的上下文中意味着不同的东西。
在 Fortran 上下文中,“双精度”是指一种特定类型的实数,它比默认的实数类型具有更高的精度。在更一般的通信中,“双精度”通常被认为是一种特定的真实类型的 64 位,它与 IEEE 浮点规范相匹配。
gfortran 的编译器标志-fdefault-real-8
意味着默认实数占用 8 个字节,并且很可能是编译器用来表示 IEEE 双精度的那个。
因此,1.0
是一个默认的实数常量,而不是双精度常量,但默认实数可能恰好与 IEEE 双精度相同。
像这样的问题反映了字面常量中精度的含义。对于任何向我询问有关标志的建议的人,-fdefault-real-8
我会说要避免它们。
推荐阅读
- reporting-services - 基于 ssrs 报告中的符号的换行符
- google-api - 从 Google OAuth 获取一些用户的空名和姓氏
- selenium - 范围报告 v4 步骤计数在仪表板中更新为 0
- python - 如何在 Azure DevOps 中使用 python api 添加分支策略
- c++ - 在 range-v3 中,如何从一对迭代器中创建一个范围?
- javascript - Google Play 商店安全警报说您的应用包含易受攻击的 JavaScript 库如何删除安全警告?
- python - 使用 Python 查询 SQL Server Analysis Services (SSAS) 多维数据集数据
- angular - 在动态添加的输入字段上自动对焦
- javascript - 在 setInterval 内调用函数
- android-studio - Android Studio 在哪里安装 VULKAN_SDK?