我有两个非常简短的问题:
我刚读到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])
。
例如,假设您要确保x
的类型是十进制精度至少为10位,十进制指数范围至少为100。
INTEGER, PARAMETER :: mytype = SELECTED_REAL_KIND(10, 100)
REAL(KIND=mytype) :: x
有关更多信息:仁爱
在实践中,如果您正在编写一个要求给定精度的程序,并且该程序可以在异国或旧系统上运行,那么以这种方式定义您的类型是一个非常好的主意。这里显示了一些常见的定义:实精度
发布于 2010-01-12 11:22:52
"exp“是一个泛型函数,它返回与其参数相同的类型--实数或复杂的精度。应该优先使用它而不是旧的表单"dexp“,因为使用"exp”编译器将自动返回正确的类型。通用名称是在Fortran 77中添加的。
发布于 2010-01-12 11:43:42
你问题的第2部分的答案是指数函数的范围是所有正数的集合。在Fortran术语中,这意味着所有实数的集合都大于0。是的,根据Fortran标准,编译器依赖于编译,但实际上,如果您认为它是所有正数IEEE浮点数的集合,那么在实践中不会发生多大的错误,只要您想要的是单精度或双精度。但是,为了严格起见,您需要熟悉编译器所支持的实数的种类,这些实数几乎肯定包括IEEE f-p数字,但也可能包括其他的实数。
https://stackoverflow.com/questions/2047922
复制相似问题