2017-09-27 69 views
2

我知道浮点数是不准确的。不过,我的问题是,哪个“下一个”数字的结果是四舍五入的。当“真实”结果无法准确表示时,double/float是如何舍入的?

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

我的猜测是这是一个尾数会发生什么问题,但我不确定它是否被截断,无论它取决于结果是否从“下方”创建(例如总和)或“从上面”(例如差异)。还是更容易,它是纯粹的任意,只取决于编译器/体系结构?

回答

2

这很可能是你的编译平台使用IEEE 754

为基本操作,+, - ,*,/,四舍五入是不可能随心所欲。 IEEE 754定义了几个rounding modes。如果您未明确设置默认模式,则会将结果四舍五入为最接近的可表示值(“舍入到最近,与偶数关联”)。这就是IEEE 754中关注的细节,规则描述了当结果与两个候选可表示值相等时,该做什么。

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

David Golberg的“每个计算机科学家应该知道什么是浮点运算”article经常被推荐为willy-nilly在本网站随时浮点出现,但在这种情况下,它听起来像你可能想读它。

1

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

默认模式被四舍五入到最接近的表示的数,且在相同的情况下,舍入到偶数(即,一个与所述至少显著位等于零)。

查看https://en.m.wikipedia.org/wiki/IEEE_754了解更多信息。