首页 > 解决方案 > 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

标签: floating-pointfortrangfortran

解决方案


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 类参数


推荐阅读