用Fortran90编写的程序手册上写道:“所有实数变量和参数都是以64位精度(即real*8)指定的。”
根据Wikipedia的说法,单精度对应于32位精度,而双精度对应于64位精度,因此显然该程序使用双精度。
但是real*8是什么意思呢?
我以为8的意思是小数点后跟8位数字。然而,Wikipedia似乎说单精度通常提供6-9位数字,而double precision通常提供15-17位数字。这是否意味着“64位精度”语句与real*8不一致?
发布于 2012-05-10 01:10:49
8表示数据类型使用的字节数。
因此,32位整数是沿着相同的线进行integer*4的。
快速搜索找到了this guide to Fortran data types,其中包括:
" real *4“语句指定变量名为单精度4字节实数,其精度为7位,幅值范围为10,范围从-38到+38。在几乎所有的32位计算机中,"real“语句都与"real*4”语句相同。
和
" real *8“语句指定变量名为双精度8字节实数,其精度为15位,幅值范围为10,范围从-308到+308。在几乎所有32位计算机中,“双精度”语句都与"real*8“语句相同。
发布于 2012-05-10 02:03:07
在Fortran中,现在至少有4种方法可以指定精度。
正如前面所回答的,real*8指定了字节数。它有点过时了,但应该是安全的。
新的方法是使用“种类”。人们应该使用内部函数来获得具有所需精度的类型。通过特定的数值指定种类是有风险的,因为不同的编译器使用不同的值。
另一种方法是使用ISO_C_Binding的命名类型。This question讨论了整数的种类系统--它与实数非常相似。
发布于 2012-05-10 01:45:39
如果与TYPE而不是CHARACTER一起使用,星形符号(就像TYPE*n所称的)是一种非标准的Fortran结构。
如果应用于字符类型,它将创建n字符的数组(或n字符的字符串)。
如果应用于其他类型,则以字节为单位指定存储大小。在引入了类型类型概念的Fortran 90+中,应该不惜一切代价避免这种情况。指定存储大小将创建不可移植的应用程序。
https://stackoverflow.com/questions/10520819
复制相似问题