我有两个非常简短的问题:
我刚读到 DEXP() 是 EXP() 的古体。这是否意味着不应该再使用它?我一直认为 DEXP() 是相当于 EXP() 的双精度。
DEXP()
EXP()
指数函数的范围是多少?它依赖于编译器吗?
发布于 2010-01-28 11:57:01
问题1:
在现代的Fortran中,使用泛型函数(如EXP() )总是比使用过时的类型特定的等价物(如DEXP() )更好。
在Fortran的旧版本中(在FORTRAN 77之前),每种数据类型都需要一个不同的函数。因此,如果需要指数函数,则需要:单精度数字的EXP(),双精度数字的DEXP(),复数的CEXP()。Fortran现在有了函数重载,所以一个函数可以用于任何标准类型。
问题2。
原则上,指数的可能范围可以取决于处理器和编译器。然而,大多数现代处理器和编译器将使用IEEE标准。
如果需要,可以在声明变量时指定所需的变量范围。要使用的函数是 SELECTED_REAL_KIND([P,R]) 。
SELECTED_REAL_KIND([P,R])
例如,假设您要确保 x 的类型是十进制精度至少为10位,十进制指数范围至少为100。
x
INTEGER, PARAMETER :: mytype = SELECTED_REAL_KIND(10, 100) REAL(KIND=mytype) :: x
有关更多信息: 仁爱
在实践中,如果您正在编写一个要求给定精度的程序,并且该程序可以在异国或旧系统上运行,那么以这种方式定义您的类型是一个非常好的主意。这里显示了一些常见的定义: 实精度
https://stackoverflow.com/questions/2047922