即使我在 Fortran 中使用 REAL(8) 声明变量,在将值归因于变量时也必须使用 '.d0' 吗?

Must I use '.d0' when attributing values to variable even if I use REAL(8) to declare it in Fortran?

提问人:Augusto Bopsin Borges 提问时间:4/29/2021 更新时间:4/29/2021 访问量:163

问:

我是使用 Fortran 语言的新手,我正在处理一个预先编写的程序,我必须进行一些更改,并且我在程序的语句区域将所有 8 字节变量声明为 REAL(8)。但是,在将数值归因于变量和/或数组时,原始程序的作者总是使用如下内容:

...

真实(8) A

一个 = 1.d0

...

考虑到“A”不是被声明为DOUBLE PRECISION,而是从字面上声明为REAL(8),甚至认为--我认为--两者都具有相同的KIND,那么严格是必要的吗?

此外,我在某处读到应该放弃使用 REAL(8)?是吗?为什么?

据我所知(我当然可能是错的),DOUBLE PRECISION 变量中使用的字节数取决于编译器,如果我打算声明一个 8 字节变量,那么使用它来代替 REAL(8) 是危险的(我假设)或至少是不可取的。

(我正在使用 Fortran 90/95)

我将不胜感激地收到评论以澄清这个问题!多谢!

变量 Fortran 字节 精度 声明

评论

2赞 francescalus 4/29/2021
虽然你的观点密切相关,但你可能在一个问题上问得太多了。不过,作为对种类参数的介绍,请参阅另一个问题。阅读后,请修剪您从此处新了解的任何相关方面,以便这个问题变得更加集中。
4赞 Vladimir F Героям слава 4/29/2021
首先,你根本不应该使用魔术常数 8。 声明常数为 ,而不是 。 并不总是意味着 8 个字节,也不必存在。整数 like 和 2 like 的幂完全可以用二进制表示。我不对整数常量使用实数。我只是用.real(8).d0double precisionreal(8)real(8)10.25A = 1
0赞 francescalus 4/29/2021
您还可以在此处阅读有关赋值和类型转换方面的信息。
0赞 Augusto Bopsin Borges 4/29/2021
@VladimirF,感谢您的评论。然而,“A = 1.d0”只是一个示例,表明程序的原始作者如何将值写入和归因于实际变量。为什么我不应该在 real(8) 中使用 '8'?那么,您将如何声明一个具有 8 个字节的实变量并为其赋值?
2赞 Ian Bush 4/29/2021
Real( 8 ) 不保证被编译器支持。因此,使用 Real( 8 ) 意味着您的程序可能无法编译。我们在这里有问题,情况如何。进一步的实数( 8 ),如果支持,则对所表示的数字没有明确定义的精度或范围。在标准 Fortran 中有一些方法可以避免这两个问题。因此,Real(8) 不是好的做法。请参阅Francescalus链接的问题

答: 暂无答案