Fortran中特定的双精度函数有用吗?精度、函数、有用吗、Fortran

2023-09-03 13:18:23 作者:陪风去荡陪海去浪

我注意到在使用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)

这些是已定义的行为吗?如果是,双精度函数的用例是什么,或者它们是否已过时?

f x ax 1 x 2a有怎样的单调区间

[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

 
精彩推荐
图片推荐