Fortran 中特定的双精度函数是否有用?
Are the specific double precision functions in Fortran useful?
我注意到在使用 gfortran 时,tan
函数 return 的实数值与其参数相同;例如可以将 real(kind=4)
、real(kind=8)
或 real(kind=16)
传递给它,并分别在 real(kind=4)
、real(kind=8)
或 real(kind=16)
中获得结果。
另一方面,像 dtan
这样的双精度函数就没有那么灵活了。如果默认的 double kind 是 8[1] 他们只接受 and return real(kind=8)
如果默认的 kind 是 16[2] 他们只接受 and return real(kind=16)
。
这些行为是否已定义?如果是,双精度函数的用例是什么?或者它们是否已过时?
[1] 如果使用 -fdefault-double-8
或不使用 -fdefault-real-8
编译
[2] 如果使用 -fdefault-real-8
而没有 -fdefault-double-8
自 FORTRAN 77 以来,dtan
等特定精度函数实际上是不必要的。那是 long 以前的事了。有些人仍在使用它们,但应尽可能少地使用它们(我会说永远不要)。 FORTRAN 77 带来了通用的内在函数,这是通常应该使用的。您只需要确保检查参数的类型即可。使用 d...
函数,如果参数不是双精度,编译器会报错。
但它们在 Fortran 2008 中完全有效。关于它们在 Fortran 2018 中的过时性有一些变化,但我不确定具体是什么。然而,在 Fortran 2018 中,它们是宣布过时(另见史蒂夫的评论)。我认为也不可能将它们作为过程参数传递给其他过程。
最后一点,real(kind=4), real(kind=8) or real(kind=16)
不是可移植的表示法。种类数字 4, 8 and 16
根本不需要存在,或者在不同的编译器中可能意味着不同的东西。 种类号不是字节数。确实某些编译器使用种类号1, 2 and 3
。参见 Fortran 90 kind parameter
我注意到在使用 gfortran 时,tan
函数 return 的实数值与其参数相同;例如可以将 real(kind=4)
、real(kind=8)
或 real(kind=16)
传递给它,并分别在 real(kind=4)
、real(kind=8)
或 real(kind=16)
中获得结果。
另一方面,像 dtan
这样的双精度函数就没有那么灵活了。如果默认的 double kind 是 8[1] 他们只接受 and return real(kind=8)
如果默认的 kind 是 16[2] 他们只接受 and return real(kind=16)
。
这些行为是否已定义?如果是,双精度函数的用例是什么?或者它们是否已过时?
[1] 如果使用 -fdefault-double-8
或不使用 -fdefault-real-8
[2] 如果使用 -fdefault-real-8
而没有 -fdefault-double-8
自 FORTRAN 77 以来,dtan
等特定精度函数实际上是不必要的。那是 long 以前的事了。有些人仍在使用它们,但应尽可能少地使用它们(我会说永远不要)。 FORTRAN 77 带来了通用的内在函数,这是通常应该使用的。您只需要确保检查参数的类型即可。使用 d...
函数,如果参数不是双精度,编译器会报错。
但它们在 Fortran 2008 中完全有效。关于它们在 Fortran 2018 中的过时性有一些变化,但我不确定具体是什么。然而,在 Fortran 2018 中,它们是宣布过时(另见史蒂夫的评论)。我认为也不可能将它们作为过程参数传递给其他过程。
最后一点,real(kind=4), real(kind=8) or real(kind=16)
不是可移植的表示法。种类数字 4, 8 and 16
根本不需要存在,或者在不同的编译器中可能意味着不同的东西。 种类号不是字节数。确实某些编译器使用种类号1, 2 and 3
。参见 Fortran 90 kind parameter