我正在尝试从以下来源了解 IEEE 舍入的特性On fast IEEE Rounding
任何人都可以解释四舍五入的方程式吗?是什么意思?什么是地板和天花板功能?我试过 IEEE 754 ,但没有提到这些
我正在尝试从以下来源了解 IEEE 舍入的特性On fast IEEE Rounding
任何人都可以解释四舍五入的方程式吗?是什么意思?什么是地板和天花板功能?我试过 IEEE 754 ,但没有提到这些
让我们从 floor( ) 和 ceiling( ) 开始(从这里我将称之为“ceil”)。这些是将实数映射到整数的基本数学函数。形式上,它们定义如下:
floor(x) = max { n in Z | n <= x }
ceil(x) = min { n in Z | n >= x }
更明确地说,下限x是不大于 的最大整数,x上限是不小于 的最小整数x。一些例子:
floor(1.5)是1。ceil(2)是2。floor(-3.14159)是-4。有关更多详细信息,请查阅维基百科。
好的,现在让我们继续四舍五入。每个实数 x 要么是一个整数(在这种情况下floor(x) == x == ceil(x)),要么位于两个整数之间floor(x) < x < ceil(x)。在数学上,“舍入规则”是f将实数映射到具有以下属性的整数的函数:对于每个实x数f(x) = floor(x)或f(x) = ceil(x)。这为在任何情况下选择哪种可能的结果留下了很大的灵活性,因此有很多不同的舍入规则。以下是一些示例(这些当然不是详尽无遗的):
每个floor( )和ceil( )都是一个舍入规则。
“向零舍入”:只需丢弃输入的小数部分。这也称为截断,通常写成称为 的数学函数trunc( )。它可以定义为trunc(x) = ceil(x)if x < 0,trunc(x) = floor(x)否则*。例如,trunc(1.5)是1和trunc(-2.7)是-2。
“从零舍入”或“向无穷大舍入”:这是截断的“相反”;如果x < 0结果为floor(x),则结果为ceil(x)否则。这条规则没有通用的数学名称,所以我就叫它round-away( )。例子:round-away(1.001)是2,round-away(-0.7071067812)是-1。
“四舍五入”:如果输入x是整数,则返回x。否则,请查看floor(x)和ceil(x)。因为它们是连续整数,所以其中一个是偶数,另一个是奇数。返回一个奇怪的。一些例子:round-to-odd(1.001)是1、round-to-odd(-2.001)是-3和round-to-odd(4.0)是4.0。
“四舍五入,连到偶数”:这是 IEEE-754 的默认舍入模式。我会称它为round( ),但这个名字(相当反常地)用于 C 库中的不同舍入规则,我不想让每个人都感到困惑,所以我将rne( )在这里改为调用它。这里的想法如下:如果有一个唯一的整数最接近x,则返回该整数。否则,x正好位于两个整数的中间;其中一个是偶数,另一个是奇数。返回偶数。
最后一条规则可以写成“RU with fix-up”,尽管从数学上来说这是一种有点奇怪的思考方式。更常见的是,它或多或少地正式定义如下:
rne(x) = floor(x) if x - floor(x) < 0.5
floor(x) if x - floor(x) = 0.5 and floor(x) is even.
ceil(x) if x - floor(x) = 0.5 and floor(x) is odd.
ceil(x) if x - floor(x) > 0.5
rne( )此规则的一些实际应用示例: rne(0.5)is 0. rne(-1.5)是-2。 rne(1.3)是1。 rne(1.8)是2。
好的,所以这都是关于四舍五入到整数值。这与 IEEE-754 中的四舍五入到最接近的浮点数有什么关系?舍入规则不仅可以用于舍入到整数,还可以用于舍入到任何固定位数,只需将其缩放一个因子b**n,其中b是表示的基数,并且n被选择为使得所需的舍入点的数字以单位位置(LSB)结束。当然,我们实际上并不需要缩放数字和取消缩放结果;相反,我们只需将舍入规则中的ceil(x)and替换为向下舍入到所需位数的值。floor(x)x
[*] 我在这里定义实数的数学函数,而不是给出 IEEE-754 实现。因此,无需处理诸如 、 或 之类的-0边缘inf情况nan。