数据类型double precision源自Fortran 77,对该类型的唯一要求是具有更高的精度real.你不应该再使用它了.
在Fortran 90/95及更高版本中,支持至少两种大小的实数.精度由kind参数确定,其值取决于编译器.
real(kind=8) :: a, b
Run Code Online (Sandbox Code Playgroud)
要使用可移植的方式定义精度,可以使用以下方法获取kind允许一定精度的值:
integer, parameter :: long_double = SELECTED_REAL_KIND(22)
Run Code Online (Sandbox Code Playgroud)
然后你可以将你的变量声明为
real(kind=long_double) :: a, b
Run Code Online (Sandbox Code Playgroud)
但不确定您的编译器是否支持该精度,在这种情况下该SELECTED_REAL_KIND函数将返回负数.
另见这篇文章
作为第一个答案陈述,最便携的方式是指定数字的精度是使用内在函数.该语言的设计概念是,您可以确定计算所需的精度并请求它,并且编译器提供精度或更高的精度.例如,如果您计算出微分方程解是稳定的,带有11个十进制数字,那么您可以请求此值,编译器会提供满足您要求的最佳类型.对于大多数程序员来说,这是一种外国的方法,他们习惯于考虑硬件提供的少数选择而不是他们需要的东西,也许并不那么容易,因为我们很少有人是数值分析师.
如果您想使用SELECTED_REAL_KIND内在函数并针对您的特定编译器和硬件进行优化,您可能希望进行实验.一些组合将在软件中提供四极精度,这将是缓慢的.具有双精度和10字节扩展精度的编译器将通过selected_real_kind(17)提供更长的类型.具有双精度和四倍精度但不是10字节扩展精度的编译器将通过selected_real_kind(17)或selected_real_kind(32)提供四极精度.(我不知道任何支持10字节扩展和四极的编译器.)缺少四极精度的编译器将为selected_real_kind(32)返回-1.
| 归档时间: |
|
| 查看次数: |
3503 次 |
| 最近记录: |