24小时热门版块排行榜    

查看: 3842  |  回复: 8

liming9398

金虫 (正式写手)

[求助] fortran中到底该如何比较两个实数是否相等

如果都是real(4)该如何比较,都是real(8) 又该如何比较?是比较绝对误差还是相对误差,哪个误差都说要小于一个比较小的数,到底应该选多小呢,不同的书说法不一样,又说-4次方的,又说-8次方的,还有的用机器精度(-8次方和-16次方,双精度表示0.24时,实际存储的是0.239999994635582,这个绝对误差本身就是-9次方量级啊,显然不是-16方的量级啊??)到底哪个误差该选多大,有没有一个统一的标准或者最好的选择?
回复此楼

» 收录本帖的淘帖专辑推荐

Ouwen's Greenhouse

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
这个要看你自己觉得多大是合适的,你要是认为 0.2400000与0.2399999是相等的,你就设为两者之差小于 0.000001好了……,当然,一般也与你的变量的精度有关
2楼2012-03-31 09:28:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


liming9398: 金币+1 2012-03-31 11:18:40
另外,你看一下 gfortran 中这个程序的输出:
CODE:
  program test
      double precision a
      real b
      a=0.24d0
      b=0.24
      write(*,*) a
      write(*,*) b
   end program test

0.23999999999999999
  0.23999999
3楼2012-03-31 09:32:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

【答案】应助回帖


感谢参与,应助指数 +1
liming9398: 金币+1 2012-03-31 11:19:03
我来吐槽一下对于“精度”的理解应该怎样吧

首先,我们应该了解IEEE754标准规定的单精度和双精度是怎样的

关于IEEE754标准:http://en.wikipedia.org/wiki/IEEE754
关于单精度:http://en.wikipedia.org/wiki/Sin ... oating-point_format
关于双精度:http://en.wikipedia.org/wiki/Dou ... oating-point_format

注意:尾数部分(fraction)是二进制表示的!

单精度的尾数有23位,所以它的最小单位是2的-24次方,约等于5.96E-8;双精度的尾数有52位,所以它的最小单位是2的-53次方,约1.11E-16,常说的“机器精度”是这个意思

领悟十进制转二进制的局限性的话,你就知道为啥就连quadruple precision四精度都不可能精确表达0.1这么简单一个十进制小数了【同时,就算是单精度,也能够精确表达2^-149这个如此微小的十进制小数(约1.4E-45)】,楼主最初问题的答案也呼之欲出了:这个要根据实际的需求来定,因为一般的计算里面,大部分小数都不是被精确表示的,不能教条主义地选择阈值的大小
4楼2012-03-31 09:49:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

补充一点,关于显示,会根据指定的十进制小数的“显示位数”来进行四舍五入

这并不代表存储的数据就是那个样子的
5楼2012-03-31 09:51:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhangyaocun

木虫 (正式写手)

I do it my way!
6楼2012-03-31 12:39:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

【答楼主问】
引用回帖:
点到平面的距离为0表示在平面内,那么这个误差应该取多大(比如双精度时)

取一个你能接受的精度
引用回帖:
如果是表示位数造成的误差,为什么不直接取你说得哪个机器精度作为阈值呢?我觉得这样应该是最准确的啊(我是说比如双精度既然精度能到10进制的-15次方,为什么还要取成-6,-8次方呢?这样不是没充分利用数据类型的精度吗?)

这是个好问题。这并不是“没有充分利用数据类型”的精度,拿单精度为例吧,它有8位二进制指数位,和23位二进制小数位,加上隐含的前置1的尾数开头,相当于一共24位二进制有效数字。考虑一下很类似的科学计数法吧,假如我有一个十进制小数,但是它的整数部分不是零,比如:

12345.1

里面的12345的部分,势必要占去有效数字的一些位,这样剩下的供给0.1的有效二进制数字就没有24位那么多了,也就是我们不能使用2^-24约等于5.96E-8作为单精度小数的阈值了
引用回帖:
既然显示的是舍入后的,究竟怎么样才能看到真实存储的实数呢?多谢!

还是以12345.1为例吧,转成二进制小数的话,等于

11000000111001.00011 0011 0011 0011 ......

后面是无限循环二进制小数,去掉默认的最高位1,剩下的尾数都会放到23位的fraction里面(嗯,exponent部分是在范围内的,这里就不作讨论了),于是这个小数实际上会被截断成:

11000000111001.00011 0011 0

所以等于精确的十进制为:12345.099609375,绝对误差为0.000390625,这个绝对误差就要远远大于10^-8的量级了

嗯,楼主可以阅读下我上面提到的链接,理解之后就好办了
7楼2012-03-31 16:20:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

嗯,上面最后一个例子讲的是把12345.1放到单精度里面...
8楼2012-03-31 16:23:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hklgxm

金虫 (小有名气)

那么也就是说,在Fortran里面判断两个实数是否相等就只能用相对误差小于一个值来判断咯?
9楼2015-10-31 16:02:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 liming9398 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 化工京区271求调剂 +4 11ing 2026-03-02 4/200 2026-03-02 15:47 by 杨杨杨紫
[基金申请] 面上模板改不了页边距吧? +6 ieewxg 2026-02-25 7/350 2026-03-02 12:44 by stidwellNK
[基金申请] 成果系统访问量大,请15分钟后再尝试。由此给您造成的不便,敬请谅解。 +5 xhuama 2026-03-02 5/250 2026-03-02 12:34 by stidwellNK
[考研] 哈工大计算机刘劼团队招生 +4 hit_aiot 2026-03-01 6/300 2026-03-02 11:53 by 一声问好
[考研] 求调剂 +3 熬夜的猫头鹰 2026-03-02 3/150 2026-03-02 11:45 by 刘兵
[考研] 295求调剂 +8 19171856320 2026-02-28 8/400 2026-03-02 11:19 by yuchj
[考研] 284求调剂 +10 天下熯 2026-02-28 11/550 2026-03-02 11:03 by 无际的草原
[考研] 264求调剂 +4 巴拉巴拉根556 2026-02-28 4/200 2026-03-02 10:48 by yuchj
[考研] 0856材料调剂 +4 沿岸有贝壳OUC 2026-03-02 4/200 2026-03-02 10:19 by 公瑾逍遥
[考研] 299求调剂 +3 Y墨明棋妙Y 2026-02-28 5/250 2026-03-01 21:01 by tangxiaotian
[考博] 26申博 +4 想申博! 2026-02-26 6/300 2026-03-01 17:32 by 想申博!
[考研] 0856材料求调剂 +4 麻辣鱿鱼 2026-02-28 4/200 2026-03-01 16:51 by caszguilin
[基金申请] 刚录用,没有期刊号,但是在线可看的论文可以放为代表作吗 10+3 arang1 2026-03-01 3/150 2026-03-01 16:43 by babero
[考研] 课题组接收材料类调剂研究生 +3 gaoxiaoniuma 2026-02-28 4/200 2026-03-01 14:30 by jjj三跨
[考研] 298求调剂 +9 人间唯你是清欢 2026-02-28 12/600 2026-03-01 14:23 by Ducount.Y
[考研] 调剂 +3 简木ChuFront 2026-02-28 3/150 2026-03-01 11:46 by 王伟要上岸啊
[论文投稿] 求助coordination chemistry reviews 的写作模板 10+3 ljplijiapeng 2026-02-27 4/200 2026-03-01 09:07 by babero
[考研] 304求调剂 +3 52hz~~ 2026-02-28 5/250 2026-03-01 00:00 by 52hz~~
[考研] 085600材料工程一志愿中科大总分312求调剂 +8 吃宵夜1 2026-02-28 10/500 2026-02-28 20:27 by L135790
[硕博家园] 【博士招生】太原理工大学2026化工博士 +4 N1ce_try 2026-02-24 8/400 2026-02-26 08:40 by N1ce_try
信息提示
请填处理意见