floating-point - Fortran 中特定的双精度函数有用吗?
问题描述
我注意到使用 gfortrantan
函数返回与其参数相同类型的实数值;例如,一个人可以通过real(kind=4)
, real(kind=8)
or并分别在, orreal(kind=16)
中得到结果 。real(kind=4)
real(kind=8)
real(kind=16)
dtan
另一方面,像 一样的双精度函数就没有那么灵活了。如果默认的双精度类型是 8[1],它们只接受和返回real(kind=8)
,如果默认的类型是 16[2],它们只接受和返回real(kind=16)
。
这些定义的行为是什么,如果是,双精度函数的用例是什么,或者它们是否已过时?
[1] 如果编译有-fdefault-double-8
或没有-fdefault-real-8
[2] 如果编译有-fdefault-real-8
和没有-fdefault-double-8
解决方案
dtan
自 FORTRAN 77 以来,实际上不需要特定的精度函数。那是很久以前的事了。有些人仍在使用它们,但应该尽可能少地使用它们(我会说永远不会)。FORTRAN 77 带来了通用的内在函数,这是通常应该使用的。您只需要确保检查参数的类型。对于d...
函数,如果参数不是双精度,编译器会报错。
但它们在 Fortran 2008 中完全有效。在 Fortran 2018 中它们的过时性发生了一些变化,但我不确定究竟是什么。然而,在 Fortran 2018 中,它们被宣布为过时(另请参见 Steve 的评论)。我认为也不可能将它们作为过程参数传递给其他过程。
最后一点,real(kind=4), real(kind=8) or real(kind=16)
它不是可移植的符号。种类数字4, 8 and 16
根本不必存在,或者在各种编译器中可能意味着不同的东西。种类编号不是字节数。事实上,某些编译器使用种类数1, 2 and 3
。请参阅Fortran 90 类参数
推荐阅读
- html - Python3 UnicodeEncodeError 与熊猫同时读取 CSV
- linux - 想要按天计算总尝试次数
- flutter - 无法在 D:\DevFlutter\flutter\packages\flutter_driver 中找到 package:flutter_driver
- aframe - 为什么我在 aframe 中的 a-link 使整个场景成为超链接?我只想让门户本身成为一个超链接
- docker - 如果容器包含它,为什么 Docker 看不到我的入口点?
- python-3.x - 如何使用 sklearn 保存 ML 模型(SVM、kNN)的预测结果
- python - 在 pandas 数据框中的 2 个列表中搜索常见项目
- c - 如何从 ELF 文件的 .text 部分中提取机器代码?
- javascript - 有没有办法计算数组中偶数的总和?
- ios - 如何在 Windows 的 iPhone 上安装 Flutter 应用程序?