![]() |
1
60
正如你所暗示的,
编辑:
给出一个清晰的标准参考有点棘手,因为这是IEEE-754标准中规定的规则的一个紧急属性。具体来说,它遵循的要求是,第5条中定义的操作必须正确四舍五入。减法就是这样一种运算(第5.4.1节“算术运算”),其结果是正确的四舍五入
所以
进一步编辑:
|
![]() |
2
4
|
![]() |
3
3
是的,除了特殊情况
|
![]() |
4
3
|
![]() |
5
3
不 支持IEEE 754-2008的所有处理器 (见下文参考资料)。 我对你的另一个问题的简短回答是:如果(x-y==0)和(x==y)一样安全,那么断言(x-x==0)是可以的,因为 不会产生算术下溢 在x-x或(x-y)中。
少于 如果你用DBL\u MIN下的数字进行算术运算,这个数字将是 标准化的,所以你可以像处理整数一样处理这些数字(仅限尾数运算),而不存在任何“舍入错误”。 备注 没有错误 在计算机算术运算中。这些运算只与计算机数相同(如浮点数)的+、-、*和/运算不同。有 确定性操作 关于浮点数的子集,它可以以(尾数,指数)的形式保存,每个浮点数有明确的位数。我们可以称之为 计算机浮点数 . 所以 经典浮点运算 将 回到计算机浮点数集。这样的投影操作是确定的,并且具有许多特性,如if x1>=x2然后x1*y>=x2*y。 抱歉说了这么长的话,回到我们的话题上来。
此代码产生以下输出:
所以我们可以看到,如果我们处理的数字小于DBL\u MIN,它们将不会被标准化(参见
所以我有 无下溢 如果有人有另一个处理器,比较我们的结果会很有趣 .
编辑 添加的链接 http://grouper.ieee.org/groups/754/faq.html#underflow 在我的英特尔酷睿2处理器上绝对正确。它的计算方法 在“+”和“-”浮点运算中。我的结果独立于Strict(/fp:Strict)或Precise(/fp:Precise)Microsoft Visual C编译器开关(请参阅 http://msdn.microsoft.com/en-us/library/e7s85ffb%28VS.80%29.aspx http://msdn.microsoft.com/en-us/library/Aa289157 ) 还有一个(可能是最后一个)链接和我的最后一句话 :我找到了一个很好的参考资料 http://en.wikipedia.org/wiki/Subnormal_numbers ,这里的描述和我之前写的一样。包括非正规数或非正规化数(现在通常称为次正规数,例如在 IEEE 754-2008
必须 在任何支持ieee754-2008的处理器上都是正确的。 |
![]() |
6
1
http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.18 . (但不确定是否适用于您的情况。) |
|
Rik Bloemers · for循环不接受任何浮点变量 3 年前 |
![]() |
zell · 为什么存储7个浮点数需要34字节? 3 年前 |
![]() |
Atharva Sunil Sathe · 如何删除任意数的小数点? 3 年前 |
![]() |
user1658887 · 为什么**2!=a*a一些彩车? 7 年前 |