Fortran Coder

查看: 12577|回复: 8
打印 上一主题 下一主题

[数值问题] e指数

[复制链接]

36

帖子

14

主题

0

精华

熟手

F 币
195 元
贡献
119 点
跳转到指定楼层
楼主
发表于 2020-8-24 18:39:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助,在fortran中e指数的x次方,这个x最大可以为多少。谢谢各位了
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

沙发
发表于 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次方就计算不下去了,如果想计算的更大只能换编译器了吗???????有没有其它解决的办法。

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
地板
发表于 2020-8-27 11:12:05 | 只看该作者
gaoxing4700 发表于 2020-8-27 11:08
非常感谢,因为我们用的编译器是cvf(很古老的)导致算到e的710次方就计算不下去了,如果想计算的更大只 ...

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

36

帖子

14

主题

0

精华

熟手

F 币
195 元
贡献
119 点
5#
 楼主| 发表于 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 点
6#
 楼主| 发表于 2020-8-27 14:15:35 | 只看该作者
liudy02 发表于 2020-8-27 11:12
并不是所有编译器都支持四精度实数
所以,其实楼上那个代码也不是能不经验证就拿来用的,REAL128很可能是 ...

好的,非常感谢

250

帖子

2

主题

0

精华

宗师

F 币
1730 元
贡献
872 点

规矩勋章

7#
发表于 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 点
8#
 楼主| 发表于 2020-8-27 19:19:58 | 只看该作者
necrohan 发表于 2020-8-27 17:03
如果是科学计算,我感觉算到e的709次方精度已经不高了,改算法吧

好的,打算换一个编译器

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
9#
发表于 2020-8-27 22:51:22 | 只看该作者
gaoxing4700 发表于 2020-8-27 19:19
好的,打算换一个编译器

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

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-20 00:19

Powered by Tencent X3.4

© 2013-2024 Tencent

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