编写Fortran代码时,通过分配kind=8
或double precision
来声明实变量是确保双精度的一种方法。另一种方法是不在代码中明确声明任何内容,而是使用编译器选项,即-r8
(ifort)等。
这两者有区别吗?
答案 0 :(得分:6)
仔细阅读此内容,但不是100%重复: Fortran: integer*4 vs integer(4) vs integer(kind=4)和 Fortran 90 kind parameter
kind=8
是不可移植的,不会在某些编译器中工作并教给初学者,即使在一门Coursera课程中也可以看到它应该受到刑事起诉。
有不同的编译器选项,效果不同。 Ones将所有4字节实数或整数提升为8字节实数。其他设置默认类型为8.这打破了一些关于存储的标准假设,并且约double precision
能够容纳超过默认类型。例如在gfortran:
-fdefault-real-8
将默认实数设置为8字节实数。这与以下内容并不完全相同:
-freal-4-real-8
将所有4字节实数提升为8字节。您必须小心了解这些差异,并且通常使用这些选项并不是一个很好的做法。
推荐的解决方案总是相同的,使用命名常量:
integer, parameter :: rp = ...
并始终使用
real(rp) :: x
您可以拥有更多这些常量。根据引用的问题(real64
,kind(1.d0)
,selected_real_kind(...)
)设置常量的值。