Fortran中特定的双精度函数有用吗? [英] Are the specific double precision functions in Fortran useful?
问题描述
我注意到在使用gfortran时,tan
函数返回与其参数相同类型的实值;例如,可以将real(kind=4)
、real(kind=8)
或real(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
进行编译
推荐答案
从FORTRAN77开始,诸如dtan
这样的特定精度函数实际上是不必要的。那是很久以前的事了。有些人仍然在使用它们,但应该尽可能少使用它们(我会说永远不会)。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 kind parameter
这篇关于Fortran中特定的双精度函数有用吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!