我有两个非常简短的问题:
1 - 我刚刚读到DEXP()
is the archaic的形式EXP()
。这是否意味着不应再使用它?我一直以为DEXP()
双精度等于EXP()
.
2 - 指数函数的范围是多少?它依赖于编译器吗?
问题 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
了解更多信息:SELECTED_REAL_KIND http://fortranwiki.org/fortran/show/selected_real_kind
实际上,如果您正在编写一个需要给定精度的程序,并且可能在异国情调或旧系统上运行,那么以这种方式定义您的类型是一个非常好的主意。这里显示了一些常见的定义:真正的精度 http://fortranwiki.org/fortran/show/Real+precision
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)