gpt4 book ai didi

fortran - Fortran 90 中有更好的 double 赋值吗?

转载 作者:行者123 更新时间:2023-12-02 12:06:57 25 4
gpt4 key购买 nike

在 Fortran 90(在 Mac OS X 上使用 gfortran)中,如果我将值分配给 double 变量而没有显式附加类型,则精度不会“采用”。我的意思是,如果我运行以下程序:

program sample_dp

implicit none

integer, parameter :: sp = kind(1.0)
integer, parameter :: dp = kind(1.0d0)

real(sp) :: a = 0.
real(dp) :: b = 0., c = 0., d = 0.0_dp, e = 0_dp

! assign values
a = 0.12345678901234567890
b = 0.12345678901234567890
c = DBLE(0.12345678901234567890)
d = 0.12345678901234567890_dp

write(*,101) a, b, c, d
101 format(1x, 'Single precision: ', T27, F17.15, / &
1x, 'Double precisison: ', T27, F17.15, / &
1x, 'Double precision (DBLE): ', T27, F17.15, / &
1x, 'Double precision (_dp): ', T27, F17.15)

end program

我得到结果:

Single precision:        0.123456791043282
Double precision: 0.123456791043282
Double precision (DBLE): 0.123456791043282
Double precision (_dp): 0.123456789012346

单精度结果按照预期从第 8 位小数开始四舍五入,但只有我用 _dp 显式分配的 double 变量保留所有 16 位精度。这看起来很奇怪,因为我期望(我对 Fortran 比较陌生) double 变量将自动成为 double 。有没有更好的方法来分配 double 变量,或者我是否必须像上面那样显式键入它们?

最佳答案

未标记为 double 的实数将被假定为单精度。仅仅因为稍后您将其分配给 double 变量,或将其转换为 double ,并不意味着该值将“神奇地”成为 double 。它不会预先了解该值将如何使用。

关于fortran - Fortran 90 中有更好的 double 赋值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6146005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com