IEEE舍入计划

时间:2013-11-14 10:35:45

标签: floating-point rounding floating-accuracy ieee-754

我正在尝试从以下来源On fast IEEE Rounding

了解IEEE舍入的功能

enter image description here 任何人都可以解释一下这个等式吗?什么是修复意味着什么?什么是地板和天花板功能?我尝试过IEEE 754,但它没有提到这些

1 个答案:

答案 0 :(得分:4)

让我们从floor()和ceiling()开始(我将从这里开始称之为“ceil”)。这些是将实数映射到整数的基本数学函数。形式上,它们的定义如下:

floor(x) = max { n in Z | n <= x }
ceil(x) = min { n in Z | n >= x }

更明显地,x的最大值是不大于x的最大整数,并且ceil是不小于x的最小整数。一些例子:

  • floor(1.5)1
  • ceil(2)2
  • floor(-3.14159)-4

详情请咨询wikipedia

好的,现在让我们继续四舍五入。每个实数x 是一个整数(在这种情况下为floor(x) == x == ceil(x)),或位于两个整数floor(x) < x < ceil(x)之间。在数学上,“舍入规则”是一个函数f,它将实数映射到具有以下属性的整数:对于每个实数xf(x) = floor(x)f(x) = ceil(x)。这为在任何情况下选择可能的结果留下了很大的灵活性,因此存在许多不同的舍入规则。以下是一些示例(these certainly aren't exhaustive):

  • floor( )ceil( )均为舍入规则。

  • “向零舍入”:简单地丢弃输入的小数部分。这也称为截断,通常被编写为名为trunc( )的数学函数。如果trunc(x) = ceil(x),则可以定义为x < 0,否则定义为trunc(x) = floor(x) *。例如,trunc(1.5)1trunc(-2.7)-2

  • “从零开圆”或“向无限圆”:这是截断的“对立面”;如果x < 0结果为floor(x),则结果为ceil(x)。此规则没有通用的数学名称,因此我将其称为round-away( )。示例:round-away(1.001)2round-away(-0.7071067812)-1

  • “round to odd”:如果输入x是整数,则返回x。否则,请查看floor(x)ceil(x)。因为它们是连续的整数,其中一个是偶数,另一个是奇数。归还奇怪的那个。一些示例:round-to-odd(1.001)1round-to-odd(-2.001)-3round-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)0rne(-1.5)-2rne(1.3)1rne(1.8)2

好的,所以这就是讨论四舍五入到整数值。与IEEE-754中的舍入到最近的浮点数有什么关系?舍入规则不仅可以用于舍入到整数,还可以用于舍入到任意固定数量的数字,只需将其缩放b**n因子,其中b是基数。选择表示和n,以便数字的所需舍入点以单位位置(LSB)结束。当然,我们实际上并不需要缩放数字并取消缩放结果;相反,我们只需将舍入规则中的ceil(x)floor(x)替换为x的值向下舍入,最多可达到所需的位数。

[*]我在这里定义实数上的数学函数,而不是给出IEEE-754实现。因此,无需处理-0infnan等边缘情况。