Fortran Coder

查看: 106|回复: 8

[数值问题] e指数

[复制链接]

36

帖子

14

主题

0

精华

熟手

F 币
195 元
贡献
119 点
发表于 2020-8-24 18:39:38 | 显示全部楼层 |阅读模式
求助,在fortran中e指数的x次方,这个x最大可以为多少。谢谢各位了
回复

使用道具 举报

57

帖子

2

主题

0

精华

专家

F 币
391 元
贡献
170 点

规矩勋章

发表于 2020-8-24 21:42:03 | 显示全部楼层
根据最后得到的实数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

36

帖子

14

主题

0

精华

熟手

F 币
195 元
贡献
119 点
 楼主| 发表于 2020-8-27 11:07:42 | 显示全部楼层
风平老涡 发表于 2020-8-24 21:42
根据最后得到的实数Kind。

[mw_shl_code=fortran,true]program test_precision

非常感谢,因为我们用的编译器是cvf(很古老的)导致算到e的710次方就计算不下去了,如果想计算的更大只能换编译器了吗???????有没有其它解决的办法。

167

帖子

14

主题

0

精华

大宗师

F 币
4021 元
贡献
823 点
发表于 2020-8-27 11:12:05 | 显示全部楼层
gaoxing4700 发表于 2020-8-27 11:08
非常感谢,因为我们用的编译器是cvf(很古老的)导致算到e的710次方就计算不下去了,如果想计算的更大只 ...

并不是所有编译器都支持四精度实数
所以,其实楼上那个代码也不是能不经验证就拿来用的,REAL128很可能是-1什么的
除了换一个能支持四精度实数的编译器,没有别的选择……

36

帖子

14

主题

0

精华

熟手

F 币
195 元
贡献
119 点
 楼主| 发表于 2020-8-27 11:15:39 | 显示全部楼层
风平老涡 发表于 2020-8-24 21:42
根据最后得到的实数Kind。

[mw_shl_code=fortran,true]program test_precision

谢谢大神的回复,还想请教一个问题我现在用的是cvf编译器,只能算到e的709次方,有没有什么办法把范围扩大。非常感谢了

36

帖子

14

主题

0

精华

熟手

F 币
195 元
贡献
119 点
 楼主| 发表于 2020-8-27 14:15:35 | 显示全部楼层
liudy02 发表于 2020-8-27 11:12
并不是所有编译器都支持四精度实数
所以,其实楼上那个代码也不是能不经验证就拿来用的,REAL128很可能是 ...

好的,非常感谢

136

帖子

2

主题

0

精华

大师

F 币
892 元
贡献
465 点

规矩勋章

发表于 2020-8-27 17:03:11 | 显示全部楼层
gaoxing4700 发表于 2020-8-27 11:17
谢谢大神的回复,还想请教一个问题我现在用的是c v f编译器,只能算到e的709次方,有没有什么办法把范围 ...

如果是科学计算,我感觉算到e的709次方精度已经不高了,改算法吧

36

帖子

14

主题

0

精华

熟手

F 币
195 元
贡献
119 点
 楼主| 发表于 2020-8-27 19:19:58 | 显示全部楼层
necrohan 发表于 2020-8-27 17:03
如果是科学计算,我感觉算到e的709次方精度已经不高了,改算法吧

好的,打算换一个编译器

167

帖子

14

主题

0

精华

大宗师

F 币
4021 元
贡献
823 点
发表于 2020-8-27 22:51:22 | 显示全部楼层
gaoxing4700 发表于 2020-8-27 19:19
好的,打算换一个编译器

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

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2020-9-27 07:52

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表