3

我正在尝试从以下来源了解 IEEE 舍入的特性On fast IEEE Rounding

在此处输入图像描述 任何人都可以解释四舍五入的方程式吗?是什么意思?什么是地板和天花板功能?我试过 IEEE 754 ,但没有提到这些

4

1 回答 1

4

让我们从 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将实数映射到具有以下属性的整数的函数:对于每个实xf(x) = floor(x)f(x) = ceil(x)。这为在任何情况下选择哪种可能的结果留下了很大的灵活性,因此有很多不同的舍入规则。以下是一些示例(这些当然不是详尽无遗的):

  • 每个floor( )ceil( )都是一个舍入规则。

  • “向零舍入”:只需丢弃输入的小数部分。这也称为截断,通常写成称为 的数学函数trunc( )。它可以定义为trunc(x) = ceil(x)if x < 0trunc(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

  • “四舍五入”:如果输入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)is 0. rne(-1.5)-2rne(1.3)1rne(1.8)2

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

[*] 我在这里定义实数的数学函数,而不是给出 IEEE-754 实现。因此,无需处理诸如 、 或 之类的-0边缘inf情况nan

于 2013-11-14T13:59:25.690 回答