Fortran中特定的双精度函数有用吗? [英] Are the specific double precision functions in Fortran useful?

查看:0
本文介绍了Fortran中特定的双精度函数有用吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆