24小时热门版块排行榜    

Znn3bq.jpeg
汕头大学海洋科学接受调剂
查看: 3928  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 08工学 309分求调剂 +12 Yin DY 2026-04-08 12/600 2026-04-14 17:49 by lhj2009
[考研] 302分求调剂 +10 凡语祈愿 2026-04-08 11/550 2026-04-14 16:50 by jiangguiquan11
[考研] 一志愿双非085400电子信息344 求调剂,对材料和化学方向也感兴趣 +12 无情的小羊 2026-04-09 13/650 2026-04-13 14:17 by 张zhihao
[考研] 一志愿厦大生物学332求调剂 +11 池池池池池池 2026-04-08 11/550 2026-04-13 14:10 by 科研论
[考研] 一志愿华工085600 331分 +7 天下ww 2026-04-09 7/350 2026-04-13 09:01 by lhj2009
[考研] 电子信息279求调剂,有书读就行 +8 wwwooden 2026-04-08 11/550 2026-04-11 20:22 by cq2548
[考研] 求调剂 +6 电气300求调剂不 2026-04-08 6/300 2026-04-11 20:14 by 逆水乘风
[考研] 359求调剂 +5 胃痉挛累了 2026-04-11 5/250 2026-04-11 19:55 by lbsjt
[考研] 求调剂 +3 胃痉挛累了 2026-04-11 5/250 2026-04-11 14:13 by luhong1990
[考研] 288求调剂 +15 代fish 2026-04-09 16/800 2026-04-11 10:26 by wwj2530616
[考研] 工科273调剂 +6 X1999 2026-04-09 7/350 2026-04-11 10:23 by zhq0425
[考研] 一志愿985机械学硕380求调剂 +5 关关雎鸠10 2026-04-11 5/250 2026-04-11 10:10 by 知念。A
[考研] 282,求调剂 +12 jggshjkkm 2026-04-09 14/700 2026-04-11 09:39 by 猪会飞
[考研] 368求调剂 +3 17385968172 2026-04-10 3/150 2026-04-10 20:12 by 电子奥德彪
[考研] 计算机类求调剂,22408-274分 +7 上岸de小虫 2026-04-09 8/400 2026-04-10 19:56 by fxue1114
[考研] 22408 366分,本科211,一志愿西工大 +4 Rubt 2026-04-09 4/200 2026-04-10 19:51 by chemisry
[论文投稿] mdpi小修rvr时间四五天了 20+3 哈哈high 2026-04-08 5/250 2026-04-10 16:02 by 北京莱茵润色
[考研] 机械专368 有去处吗 +4 种大树 2026-04-10 4/200 2026-04-10 15:31 by jiajinhpu
[考研] 0703化学求调剂 +21 不知名的小卅 2026-04-08 21/1050 2026-04-09 18:55 by l_paradox
[考研] 283电子信息求调剂 +4 三石WL 2026-04-08 4/200 2026-04-09 10:21 by wp06
信息提示
请填处理意见