24小时热门版块排行榜     石溪大学接受考研调剂申请>

【调剂】北京石油化工学院2024年16个专业接受调剂
查看: 3147  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 求调剂 +4 鹿萌月yy 2024-04-15 5/250 2024-04-16 16:16 by chenweiwade
[考研] 浙江海洋大学 船舶与海运学院 交通运输专硕 (交通信息工程及控制)接收调节 +3 joee 2024-04-15 7/350 2024-04-16 12:06 by lushiyw
[有机交流] 粗产品在甲醇中回流2次是啥意思? +4 DDT. 2024-04-12 9/450 2024-04-16 12:01 by 宁静远行
[考研] 347求调剂 +3 寒辰ovo 2024-04-15 5/250 2024-04-16 11:23 by 寒辰ovo
[论文投稿] MDPI初审7天,是不是被拒 20+5 applegirl5762 2024-04-15 7/350 2024-04-16 09:38 by xs74101122
[考研] 材料与化工277分求调剂 +33 柠檬不酸zy 2024-04-10 36/1800 2024-04-15 11:37 by coolfishwll
[考研] 287求调剂 +6 南沨 2024-04-14 6/300 2024-04-14 23:08 by lincunhui
[考研] 化学309找调剂,本科和一志愿双非,已过四六级 +28 gwj1 2024-04-10 30/1500 2024-04-14 22:57 by 永字号
[教师之家] 表弟博士毕业,选30万安家费还是副教授??? +10 yingyu427 2024-04-11 12/600 2024-04-13 11:16 by karl_messi
[考研] 化工专硕求调剂 +9 青梅duoduo 2024-04-12 11/550 2024-04-13 09:33 by lincunhui
[教师之家] 博士算工龄吗? +5 babu2015 2024-04-11 7/350 2024-04-12 10:40 by mapenggao
[考研] 274求调剂 +8 ghshsh 2024-04-10 8/400 2024-04-12 08:34 by lus902
[考研] end +16 不屈之心678 2024-04-11 16/800 2024-04-12 06:48 by a李鸿章
[考研] 377求调剂 +4 王子倩 2024-04-11 4/200 2024-04-11 18:50 by shangxh
[考研] 双9 +5 随鱼而安. 2024-04-11 5/250 2024-04-11 16:40 by 公瑾逍遥
[考研] 085600 材料与化工 总分 310 求调剂 +23 a1845052693 2024-04-09 25/1250 2024-04-11 12:08 by 橘子666789
[考研] 281求调剂 +3 xxinj 2024-04-10 6/300 2024-04-10 23:35 by deli000000
[考研] 求调剂 +3 LED绿光灯 2024-04-10 6/300 2024-04-10 17:22 by LED绿光灯
[考研] 动力工程及工程热物理291分,求调剂 +5 杨飞宏 2024-04-10 5/250 2024-04-10 14:51 by xiaoxiaowuya
[考研] 301求调剂 +8 28759 2024-04-09 8/400 2024-04-10 10:08 by 一心静念
信息提示
请填处理意见