现在我脑海里浮现出这个问题:在现代Fortran中宣布双精度真实的"接受"方法是什么?从最古老到最新,故事似乎是这样的:DOUBLE PRECISION然后REAL(kind=8),然后INTEGER, PARAMETER :: dp=kind(1.d0)用REAL(kind=dp)--Metcalf现在说dp=kind(0.d0)- 现在float32=selected_real_kind(6,37)或者float64=selected_real_kind(15,307).所以...
kind冗余REAL(kind=dp)?gfortran或ifort?Hig*_*ark 23
我个人现在写
use, intrinsic :: iso_fortran_env
Run Code Online (Sandbox Code Playgroud)
其包括参数,例如int32,real64它们具有明显的含义,并且可以这样使用:
real(real64) :: a_64_bit_real_scalar
Run Code Online (Sandbox Code Playgroud)
请注意,kind=8标准不保证提供8字节类型.类型参数所采用的值不是标准化的,并且因编译器而异.
如果需要,您可以编写诸如的语句
use, intrinsic :: iso_fortran_env, dp=>real64
...
real(dp) :: a_64_bit_real_scalar
Run Code Online (Sandbox Code Playgroud)
1)我现在应该如何声明双精度实数?
我个人更喜欢使用
integer, parameter :: wp = selected_real_kind(15,307)
real(wp) :: var
Run Code Online (Sandbox Code Playgroud)
方法用于此。但正如马克指出的,这iso_fortran_env是另一种直接的方法。如果您计划使用 C 接口,您可能需要尝试ISO_C_BINDING模块并使用
use iso_c_binding
real(c_double) :: var
Run Code Online (Sandbox Code Playgroud)
并获得您想要的双精度。
2) 是
kind多余的吗REAL(kind=dp)?
是的。
3)编译时是否需要任何特殊标志来使用
gfortranor调用双精度实数ifort?
您gfortran可以使用编译标志-fdefault-real-8。对于ifort,您可以使用该-real-size=64标志。