"真正的*8"是什么意思?

And*_*rew 28 precision fortran bit fortran90

用Fortran 90编写的程序手册说:"所有实际变量和参数都以64位精度(即real*8)指定."

根据维基百科,单精度对应于32位精度,而双精度对应于64位精度,因此显然程序使用双精度.

但是什么real*8意思呢?

我认为这8意味着8位数字跟随小数点.然而,维基百科似乎说单精度通常提供6-9位数,而双精度通常提供15-17位数.这是否意味着语句"64位精度"与real*8?不一致?

Jon*_*eet 33

8指的是数据类型使用的字节数.

所以32位整数integer*4沿着相同的行.

快速搜索找到了Fortran数据类型的指南,其中包括:

"real*4"语句将变量名称指定为单精度4字节实数,其精度为7位,幅度范围为-38至+38."真实"语句与几乎所有32位计算机中的"real*4"语句相同.

"real*8"语句将变量名称指定为双精度8字节实数,其精度为15位,幅度范围为-308至+308."double precision"语句与几乎所有32位计算机中的"real*8"语句相同.

  • @HighPerformanceMark:也许你可以给我一个更有用的链接来改变呢?我当然不会声称我对Fortran有一点了解,但是答案的核心(8表示字节数)实际上是错误的还是误导性的? (11认同)
  • -1为Jon Skeet引用一个古老且误导性的引用来回答Fortran问题.这个问题的其他答案表明了对现代Fortran的更好理解. (9认同)

M. *_* B. 24

现在至少有4种方法可以在Fortran中指定精度.

如前所述,real*8指定字节数.它有点过时,但应该是安全的.

新的方式是"种类".应该使用内在函数来获得具有所需精度的类型.通过特定数值指定类型是有风险的,因为不同的编译器使用不同的值.

另一种方法是使用ISO_C_Binding的命名类型.这个问题讨论了整数的种类系统 - 它与实数非常相似.

  • 更新:现在更加支持ISO环境模块的Fortran 2008扩展.因此,如果您使用ISO_FORTRAN_ENV`,您将可以访问类型值,这些值按位数指定实数和整数类型(例如,`real(real32)::`和`real(real64)::`)作为标准和便携式按存储大小指定类型的方法. (6认同)

Hri*_*iev 14

星号表示法(如TYPE*n所谓的)是非标准的Fortran构造,如果与TYPE其他符号一起使用的话CHARACTER.

如果应用于字符类型,则会创建一个n字符数组(或一串n字符).

如果应用于其他类型,则指定存储大小(以字节为单位).在Fortran 90+中应该不惜一切代价避免这种情况,其中引入了KIND类型的概念.指定存储大小会创建非便携式应用程序.