当" true"时,双打/浮点数是如何四舍五入的?结果不够准确吗?

时间:2017-09-27 12:05:51

标签: floating-point language-agnostic

我知道浮点数不准确。但是我的问题是" next"数字结果是四舍五入的。

它是下一个更高的吗?下一个较低?它是最接近的吗?

我的猜测是它是一个关于尾数会发生什么的问题,但我不确定它是否会被截断,无论是什么或者它是否取决于结果是否已创建& #34;从下面" (例如总和)或"来自上面" (例如差异)。

或者它是否更简单,它纯粹是任意的,只取决于编译器/架构?

2 个答案:

答案 0 :(得分:2)

您的编译平台很可能使用IEEE 754。

对于基本操作,+, - ,*,/,舍入不是任意的。 IEEE 754定义了几个rounding modes。如果您没有明确设置一个默认模式,则将结果四舍五入到最接近的可表示值(“Round to nearest,ties to even”)。这就是IEEE 754中对细节的关注,规则描述了当结果同样接近两个候选可表示值时要做什么。

对于更复杂的函数,例如正弦函数,它取决于实现。最不精确的实现甚至可能产生的结果不是真实结果的两个最接近的可表示值中的任何一个!

大卫戈尔伯格的“每个计算机科学家应该知道的关于浮点运算的内容”article经常被推荐在这个网站上随时浮点出现,但在这种情况下,听起来你可能会喜欢阅读它。

答案 1 :(得分:1)

这是依赖于实现的,但是大多数遵循IEEE 754标准的实现都有选择几种舍入选项之一的方法。

默认模式四舍五入到最接近的可表示数字,并且在平局的情况下,舍入到偶数(即最低有效位的数字等于零)。

有关详情,请参阅https://en.m.wikipedia.org/wiki/IEEE_754