标题:关于 0 的大小比较
只看楼主
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
得分:0 
回复 10 楼 zklhp
看来GCC各版本对容差处理还是有差异,尽量采用安全第一的原则了,呵呵

梦想拥有一台龙芯3A-4000
2014-08-31 18:02
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
以下是引用ditg在2014-8-31 18:02:04的发言:

看来GCC各版本对容差处理还是有差异,尽量采用安全第一的原则了,呵呵

我这里是64位的 GCC 4.9.1 默认就不用8087一类的浮点指令了
2014-08-31 18:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
如果普通的浮点库能解决这类问题,人家何必另创一种精确浮点数(用于金融领域)结构!

授人以渔,不授人以鱼。
2014-08-31 18:12
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
得分:0 
哦哦哦,这个问题暂时还没接触过,以后再想想,多谢指明方向,呵呵

梦想拥有一台龙芯3A-4000
2014-08-31 18:13
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
得分:0 
对了,我想起来了,指明也没用呀,中标麒麟是32位,没64位的,哈哈

梦想拥有一台龙芯3A-4000
2014-08-31 18:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
如果没有金融浮点数类型,就把普通的浮点数舍入到某一精度的字符串中再比较,那是一定准的,只是速度变慢一些(那是必然的,守恒律永远起作用),不少语言的浮点数可以作这种相等比较,实际上也是利用字符串做中介,不要嫌人家慢。那种金融浮点数的构造也是这样,尺寸是一样的,不过能够表达的数值范围缩小,换来精度提高,优势是一定不会产生误差,可以精确比较。

[ 本帖最后由 TonyDeng 于 2014-8-31 18:24 编辑 ]

授人以渔,不授人以鱼。
2014-08-31 18:22
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
得分:0 
主要是浮点数在有限位宽的机器内存上 储存的不一定有那么连续和准确,设计复杂结果的 肯定不一定那么容易的准确的0
与0值比较  一般必须用差值绝对值是不是小于机器阈值eps比较好。当然如果编译器够好,你给定的浮点数又是那么直接,前期与0比较还是有相当的成功率的
2014-08-31 19:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
15.4 浮点计算程序表现奇怪, 在不同的机器上给出不同的结果。

首先阅读问题 15.2.

如果问题并不是那么简单, 那么回想一下, 电脑一般都是用一种浮点的格式来近似 的模拟实数的运算, 注意是近似, 不是完全。下溢、误差的累积和其它非常规性是 常遇到的麻烦。

不要假设浮点运算结果是精确的, 特别是别假设两个浮点值可以进行等价比较。也 不要随意的引入 ``模糊因素"; 参见问题 15.5。

这并不是 C 特有的问题, 其它电脑语言有一样的问题。浮点的某些方面被通常 定义为 ``中央处理器 (CPU) 是这样做的" (参见问题 12.34), 否则在一 个没有 ``正确" 浮点模型的处理器上, 编译器要被迫做代价非凡的仿真。

本文不打算列举在处理浮点运算上的潜在难点和合适的做法。一本好的有关数字 编程的书能涵盖基本的知识。参见下面的参考资料。

参考资料: [K&P, Sec. 6 pp. 115-8]; [Knuth, Volume 2 chapter 4]; [Goldberg]。

授人以渔,不授人以鱼。
2014-08-31 23:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-435389-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.318627 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved