Fortran Coder

标题: e指数 [打印本页]

作者: gaoxing4700    时间: 2020-8-24 18:39
标题: e指数
求助,在fortran中e指数的x次方,这个x最大可以为多少。谢谢各位了

作者: 风平老涡    时间: 2020-8-24 21:42
根据最后得到的实数Kind。

[Fortran] 纯文本查看 复制代码
program test_precision
  use, intrinsic :: iso_fortran_env
  implicit none
  integer, parameter :: sp = REAL32
  integer, parameter :: dp = REAL64
  integer, parameter :: qp = REAL128
  real(kind = sp) :: x1 = 0.0
  real(kind = dp) :: x2 = 0.0
  real(kind = qp) :: x3 = 0.0

  write(*,'(A,I4,A,G0,A,I6)') "Max number in ", sp*8, " bits = ", huge(x1), "   Max power to e= ", floor(log(huge(x1)))
  write(*,'(A,I4,A,G0,A,I6)') "Max number in ", dp*8, " bits = ", huge(x2), "   Max power to e= ", floor(log(huge(x2)))
  write(*,'(A,I4,A,G0,A,I6)') "Max number in ", qp*8, " bits = ", huge(x3), "   Max power to e= ", floor(log(huge(x3)))
end program test_precision


结果:
Max number in   32 bits = 0.340282347E+39   Max power to e=     88
Max number in   64 bits = 0.17976931348623157E+309   Max power to e=    709
Max number in  128 bits = 0.118973149535723176508575932662800702E+4933   Max power to e=  11356
作者: gaoxing4700    时间: 2020-8-27 11:07
风平老涡 发表于 2020-8-24 21:42
根据最后得到的实数Kind。

[mw_shl_code=fortran,true]program test_precision

非常感谢,因为我们用的编译器是cvf(很古老的)导致算到e的710次方就计算不下去了,如果想计算的更大只能换编译器了吗???????有没有其它解决的办法。
作者: liudy02    时间: 2020-8-27 11:12
gaoxing4700 发表于 2020-8-27 11:08
非常感谢,因为我们用的编译器是cvf(很古老的)导致算到e的710次方就计算不下去了,如果想计算的更大只 ...

并不是所有编译器都支持四精度实数
所以,其实楼上那个代码也不是能不经验证就拿来用的,REAL128很可能是-1什么的
除了换一个能支持四精度实数的编译器,没有别的选择……
作者: gaoxing4700    时间: 2020-8-27 11:15
风平老涡 发表于 2020-8-24 21:42
根据最后得到的实数Kind。

[mw_shl_code=fortran,true]program test_precision

谢谢大神的回复,还想请教一个问题我现在用的是cvf编译器,只能算到e的709次方,有没有什么办法把范围扩大。非常感谢了
作者: gaoxing4700    时间: 2020-8-27 14:15
liudy02 发表于 2020-8-27 11:12
并不是所有编译器都支持四精度实数
所以,其实楼上那个代码也不是能不经验证就拿来用的,REAL128很可能是 ...

好的,非常感谢
作者: necrohan    时间: 2020-8-27 17:03
gaoxing4700 发表于 2020-8-27 11:17
谢谢大神的回复,还想请教一个问题我现在用的是c v f编译器,只能算到e的709次方,有没有什么办法把范围 ...

如果是科学计算,我感觉算到e的709次方精度已经不高了,改算法吧
作者: gaoxing4700    时间: 2020-8-27 19:19
necrohan 发表于 2020-8-27 17:03
如果是科学计算,我感觉算到e的709次方精度已经不高了,改算法吧

好的,打算换一个编译器
作者: liudy02    时间: 2020-8-27 22:51
gaoxing4700 发表于 2020-8-27 19:19
好的,打算换一个编译器

如果我没理解错的话,
他的意思是,一般科学计算,双精度已经足够用了
如果双精度你觉得不够用,那么你的算法肯定有问题,已经丢失太多精度了
事实上确实是这样的,想靠四精度实数来解决能不能计算,算不算得准的问题基本都是舍本逐末




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2