数值修约

数字值的"四舍五入"一词意味着用另一个大致相等但形式更短、更简单或更明确的值来代替它。例如,23.74美元可以四舍五入为24美元,或者分数312/937可以四舍五入为1/3,或者表达式2 {/displaystyle {/sqrt {2}}{\displaystyle {\sqrt {2}}}}为1.41。

四舍五入往往是为了得到一个比原来更容易书写和处理的数值。四舍五入也可能是为了表明计算出的数字的准确性;例如,一个计算出的数量是123 456,但已知只精确到几百个单位之内,最好说成"大约123 500"。

另一方面,四舍五入会在结果中引入一些舍入误差。在许多计算中,四舍五入几乎是不可避免的,特别是在整数或定点算术中对两个数进行除法时;在计算数学函数如平方根、对数和正弦时;或者在使用有意义数字的固定数的浮点表示法时。在一连串的计算中,这些四舍五入的错误一般都会累积起来,在某些"条件不好"的情况下,那么这些错误可能会使计算结果失去意义。

对超越数学函数进行准确的四舍五入是很困难的,因为事先无法知道需要计算解决四舍五入还是四舍五入的额外位数。这个问题被称为"制表人的难题"(下图)。

四舍五入与物理量必须用数字或数字信号编码时发生的量化有许多相似之处。

四舍五入的类型

典型的四舍五入问题有:

  • 将一个无理数用分数逼近,例如π用22/7逼近。
  • 用有限的小数分数近似于一个周期性小数扩张的分数,例如5/3乘以1.6667。
  • 用分子和分母都较小的分数代替有理数,如:3122/9417乘以1/3。
  • 将小数点后的数字换成一位较少的数字,例如:将2.1784元换成2.18元。
  • 用一个尾数为零的整数代替小数,例如用23,200人代替23,217人;或者,一般来说。
  • 用指定数量的倍数替换一个数值,例如,用30秒替换27.2秒(15的倍数);

四舍五入到指定的增量

最常见的四舍五入类型是四舍五入到一个整数;或者,更一般地,四舍五入到某个增量的整数倍--例如四舍五入到整数秒的十分之一,一美元的百分之一,四舍五入到1/2或1/8英寸的整数倍,四舍五入到整数十个或数千个,等等。

一般来说,将一个数字x四舍五入到某个指定增量m的倍数,需要以下步骤。

  1. x除以m,结果为y
  2. y四舍五入到一个整数值,称其为q
  3. q乘以m,得到四舍五入的值z

z = r o u n d ( x , m ) = r o u n d ( x / m ) m {\displaystyle z=\mathrm {round} (x,m)=\mathrm {round} (x/m)\cdot m/}。 {\displaystyle z=\mathrm {round} (x,m)=\mathrm {round} (x/m)\cdot m\,}

例如,将x=2.1784元四舍五入为整分(即为0.01的倍数),需要计算y=x/m=2.1784/0.01=217.84,然后将y四舍五入为整数q=218,最后计算z=q×m=218×0.01=2.18。

当四舍五入到一个预定的有意义的数字时,增量m取决于要四舍五入的数字(或四舍五入的结果)的大小。

增量m通常是一个有限的分数,无论用什么数字系统来表示数字。对于人类来说,这通常是指十进制数字系统(即m是10的整数乘以10的,如1/1000或25/100)。对于存储在数字计算机中的中间值,通常是指二进制数字系统(m是一个整数乘以2的幂)。

从任意实值返回整数的抽象单参数"round()"函数至少有十几种不同的具体定义,在四舍五入到整数部分介绍。这里正式定义了抽象的双参数"round()"函数,但在很多情况下,它的增量隐含值m=1,然后还原成等价的抽象单参数函数,同样有十几个不同的具体定义。

四舍五入到整数

四舍五入的最基本形式是用一个整数代替一个任意数。以下所有的四舍五入模式都是前面几节中介绍和使用的抽象单参数"round()"函数的具体实现。

有很多方法可以将一个数字y四舍五入到一个整数q中,最常见的是

  • 四舍五入(或取下限,或四舍五入向负无穷大):q是不超过y的最大整数。

q = f l o o r ( y ) = ↪Ps_230A↩ y = - ↪Ps_2308↩ - y ↪Pe_2309↩ {\displaystyle q=mathrm {floor}。(y)=/leftlfloor y/rightrfloor =-/leftlceil -y/rightrceil \,}。 {\displaystyle q=\mathrm {floor} (y)=\left\lfloor y\right\rfloor =-\left\lceil -y\right\rceil \,}

  • 四舍五入(或取上限,或四舍五入加无穷):q是不小于y的最小整数。

q = c e i l ( y ) = ↪Ps_2308↩ y ↪Pe_2309↩ = - ↪Ps_230A↩ - y {displaystyle q=mathrm {ceil}。(y)=-left/lceil y/right/rceil =-left/lfloor -y/right/rfloor \,} {\displaystyle q=\mathrm {ceil} (y)=\left\lceil y\right\rceil =-\left\lfloor -y\right\rfloor \,}

  • 四舍五入(或截断,或四舍五入,远离无穷大):qy的整数部分,不含其分数位。

q = t r u n c a t e ( y ) = sgn ( y ) ↪Ps_230A↩ | y | = - sgn ( y ) ↪Ps_2308↩ - | y | ↪Pe_2309↩ {\displaystyle q=\mathrm {truncate}。(y)=-operatorname {sgn}(y)\left\lfloor \left|y\right|right\rfloor =-operatorname {sgn}(y)\left\lceil -\left|yright|right\rceil \,}。 {\displaystyle q=\mathrm {truncate} (y)=\operatorname {sgn}(y)\left\lfloor \left|y\right|\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|\right\rceil \,}

  • 从零开始舍去(或向无穷大舍去):如果y是整数,则qy;否则q是最接近0的整数,并使y在0和q之间。

q = sgn ( y ) ↪Ps_2308↩ | y | ↪Pe_2309↩ = - sgn ( y ) ↪Ps_230A↩ - | y | {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|yright|\rightrceil =-\operatorname {sgn}(y)\left\lfloor -\left|yright|\rightrfloor \,}。 {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|\right\rfloor \,}

  • 四舍五入q是最接近y的整数(见下面的平局规则)。

前四种方法称为定向四舍五入,因为从原数y到四舍五入值q的位移都朝向或远离同一个极限值(0、+∞或-∞)。

如果y为正数,则舍入-下与舍入-趋向-零相同,舍入-上与舍入-偏离-零相同。如果y是负数,舍入-下与舍入-偏离-零相同,舍入-上与舍入-偏离-零相同。在任何情况下,如果y是整数,q就是y。下表说明了这些舍入方法。

y


综上所述
(向-∞)


综述
(向+∞)



近于零


零起点


最近的

+23.67

+23

+24

+23

+24

+24

+23.50

+23

+24

+23

+24

+23+24

+23.35

+23

+24

+23

+24

+23

+23.00

+23

+23

+23

+23

+23

0

0

0

0

0

0

−23.00

−23

−23

−23

−23

−23

−23.35

−24

−23

−23

−24

−23

−23.50

−24

−23

−23

−24

-23-24

−23.67

−24

−23

−23

−24

−24

在许多计算依次进行的情况下,选择四舍五入的方法会对结果产生非常大的影响。一个著名的例子是温哥华证券交易所在1982年建立的一个新指数。它最初被设定为1000.000,22个月后降到了520左右--而在此期间,股票价格普遍上涨。问题是由于该指数每天都要重新计算数千次,而且总是四舍五入到小数点后3位,这样一来,四舍五入的误差就累积起来了。以较好的四舍五入方式重新计算后,同一时期结束时的指数值为1098.892。

打平

将一个数字y四舍五入到最接近的整数,需要一些平分规则,当y正好是两个整数之间的一半时,也就是y的分数部分正好是0.5时。

四舍五入

下面的平分规则,叫做四舍五入半数向上(或四舍五入半数向加无穷大),在许多学科中被广泛使用。即半数值y总是四舍五入。

  • 如果y的分数正好是0.5,那么q=y+0.5。

q = ↪Ps_230A↩ y + 0.5 = - ↪Ps_2308↩ - y - 0.5 ↪Pe_2309↩ {\displaystyle q=left\lfloor y+0.5right\rfloor =-/left\lceil -y-0.5right\rceil \,}。 {\displaystyle q=\left\lfloor y+0.5\right\rfloor =-\left\lceil -y-0.5\right\rceil \,}

例如,根据这个规则,值23.5被四舍五入为24,但-23.5被四舍五入为-23。

这是美国小学数学课上普遍教授的两条规则之一。[]

如果不是0.5的分数,四舍五入法引入的四舍五入误差将相当对称:每一个被四舍五入的分数(如0.268),都有一个互补的分数(即0.732)被四舍五入,数量相同。当用随机分数对一组大数进行四舍五入时,这些四舍五入误差将在统计上相互补偿,被四舍五入数的期望值(平均值)将等于原数的期望值。

然而,四舍五入的平分规则并不对称,因为正好是0.5的分数总是被四舍五入。这种不对称性在四舍五入误差中引入了一个正偏差。例如,如果y的分数由三个随机的小数位组成,那么q的期望值将比y的期望值高0.0005。由于这个原因,四舍五入规则的四舍五入也被(模糊地)称为不对称四舍五入

在0.5时四舍五入的原因之一是只需要考察一个数字。比如看到17.50000......时,前三位数字17.5,就决定了这个数字会被四舍五入到18。如果使用相反的规则(四舍五入减半),则需要检查所有的零位小数,以确定数值是否正好是17.5。

半圆向下

也可以用四舍五入向下(或四舍五入向负无穷),而不是更常见的四舍五入向上四舍五入向上的方法是一种常见的惯例,但不过是一种惯例)。

  • 如果y的分数正好是0.5,那么q=y - 0.5。

q = ↪Ps_2308↩ y - 0.5 ↪Pe_2309↩ = - ↪Ps_230A↩ - y + 0.5 {displaystyle q=left\lceil y-0.5right\rceil =-/left\lfloor -y+0.5right\rfloor \,}。 {\displaystyle q=\left\lceil y-0.5\right\rceil =-\left\lfloor -y+0.5\right\rfloor \,}

例如,23.5被四舍五入为23,-23.5被四舍五入为-24。

圆半向下的平分规则并不对称,因为正好是0.5的分数总是被舍去。这种不对称性在四舍五入误差中引入了一个负偏差。例如,如果y的分数由三个随机的小数位组成,那么q的期望值将比y的期望值低0.0005。由于这个原因,四舍五入到最近的四舍五入规则也被(模糊地)称为不对称四舍五入

离零点半圆

另一种常用的教学和使用的打平方法是离零的圆半(或向无穷的圆半),即。

  • 如果y的分数正好是0.5,那么如果y是正数,q=y+0.5,如果y是负数,q=y-0.5。

q = sgn ( y ) ↪Ps_230A↩ | y | + 0.5 = - sgn ( y ) ↪Ps_2308↩ - | y | - 0.5 ↪Pe_2309↩ {displaystyle q=\operatorname {sgn}(y)\left\lfloor \left|y\right|+0.5\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|-0.5\right\rceil \,}。 {\displaystyle q=\operatorname {sgn}(y)\left\lfloor \left|y\right|+0.5\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|-0.5\right\rceil \,}

例如,23.5被四舍五入为24,-23.5被四舍五入为-24。

这种方法对正值和负值进行对称处理,因此,如果原数是正数或负数的概率相同,则总体上没有偏差。但是,这条规则仍然会对正数产生正偏,对负数产生负偏。

它经常用于货币换算和价格四舍五入(当金额首先换算成货币中最小的有意义的小数点时,如欧元的分),因为它只需考虑第一个小数点的数字,就很容易解释,而与补充的精确数字或金额的符号无关(用于金额的支付方和接受方之间的严格等价)。

四舍五入为零

也可以将一半向零进位(或将一半向无穷远进位),而不是更常见的将一半向零进位将一半向零进位的方法是一种常见的约定,但只是一种约定)。

  • 如果y的分数正好是0.5,那么如果y是正数,q=y-0.5,如果y是负数,q=y+0.5。

q = sgn ( y ) ↪Ps_2308↩ | y | - 0.5 ↪Pe_2309↩ = - sgn ( y ) ↪Ps_230A↩ - | y | + 0.5 {displaystyle q=\operatorname {sgn}(y)/left/lceil \left|yright/-0.5\right/rceil =-\operatorname {sgn}(y)/left/lfloor -\left|yright/+0.5\right/rfloor \,/}。 {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|-0.5\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|+0.5\right\rfloor \,}

例如,23.5被四舍五入为23,-23.5被四舍五入为-23。

这种方法也是将正值和负值对称处理,因此如果原数是正数或负数的概率相同,则整体上没有偏差。但是,这个规则仍然会引入正数的负偏,负数的正偏。

半数以上为偶数

更不偏不倚的平局规则是四舍五入平局,即

  • 如果y的分数是0.5,那么q就是最接近y的偶数

因此,例如,+23.5变成+24,+22.5变成+22,-22.5变成-22,-23.5变成-24。

这种方法对正值和负值的处理也是对称的,因此,如果原数是正数或负数的概率相等,则整体上没有偏差。此外,对于大多数y值的合理分布,四舍五入数的期望值(平均值)与原数的期望值基本相同,即使后者都是正数(或都是负数)。但是,这条规则仍然会对偶数(包括零)引入正偏,对奇数引入负偏。

这种舍近求远法的变体也叫无偏舍入法(含糊其辞,有点滥用)、收敛舍入法统计学家舍入法荷兰舍入法高斯舍入法银行家舍入法。这在记账中被广泛使用。

这是IEEE 754计算函数和运算符中使用的默认舍入模式。

半圆为单数

另一条打平规则与半圆至偶数非常相似,即是

  • 如果y的分数是0.5,那么q是最接近y奇数

因此,例如,+22.5变成+23,+21.5变成+21,-21.5变成-21,-22.5变成-23。

这种方法对正值和负值的处理也是对称的,因此,如果原数是正数或负数的概率相等,则整体上没有偏差。此外,对于大多数y值的合理分布,四舍五入数的期望值(平均值)与原数的期望值基本相同,即使后者都是正数(或都是负数)。但是,这个规则仍然会对偶数(包括零)引入负偏,对奇数引入正偏。

这种变体在大多数计算中几乎从未使用过,除非是想避免将0.5或-0.5四舍五入到零,或者避免增加浮点数表示的数字的规模(缩放指数的范围有限),这样一个非无限的数字会被四舍五入到无限,或者一个小的正态值会被四舍五入到一个正常的非零值(这些可能会发生在四舍五入模式下)。实际上,这种模式更倾向于保留平局数的现有比例,尽可能避免超出范围的结果。

随机取舍

另一种无偏的平局方法是随机取舍

  • 如果y的分数是0.5,则在y+0.5和y-0.5中随机选择q,概率相等。

和四舍五入到偶数一样,这条规则基本上没有总体偏差;但在偶数和奇数q值之间也是公平的。另一方面,它在结果中引入了随机成分;对同一数据进行两次相同的计算可能会产生两种不同的结果。此外,如果人类(而不是计算机或偶然的设备)"随机"决定了四舍五入的方向,那么它就会产生无意识的偏差。

交替使用的平局

有一种方法,比大多数人都晦涩难懂,那就是圆半交替

  • 如果小数部分是0.5,则要交替进行四舍五入:第一次出现0.5的小数部分,要四舍五入;第二次出现,要四舍五入;以此类推。

如果0.5个小数部分的出现可以有效地编号,这就抑制了结果的随机成分。但是,如果出现的总数是奇数,它仍然可以根据分配给第一个出现的四舍五入的方向引入一个正或负的偏差。

简单的抖动

在某些情况下,上述所有的四舍五入方法可能都不能令人满意。例如,假设y是音频信号的精确测量值,为了降低存储或传输成本,将其舍入为整数q。如果y随时间缓慢变化,上述任何一种四舍五入方法都会导致q在很长的时间间隔内完全不变,中间会有±1的突然跳动,当回放q信号时,这些阶梯会被听成一种非常不愉快的噪声,原始信号在两个整数值之间的任何变化都会完全消失。

避免这个问题的一个方法是将每个数值y向上舍入的概率等于它的分数,向下舍入的概率是它的补数。例如,数字23.17将被向上舍入到24,概率为0.17,向下舍入到23,概率为1-0.17=0.83。这相当于将y+s四舍五入,其中s是一个均匀分布在0和1之间的随机数)。通过这种特殊的四舍五入,也就是所谓的抖动,突如其来的台阶会被一种不太令人讨厌的噪声所取代,即使是原始信号的微小变化也会在一定程度上被保留下来。就像随机方法来打破平局一样,抖动没有偏差:如果所有的分数值都是同样的可能性,那么四舍五入一定的量和四舍五入同样的量是一样的;对于几个四舍五入的数字之和也是如此。另一方面,抖动在结果中引入了随机成分,比随机平分法的随机成分大得多。

更准确地说,每个抖动数的圆角误差将是一个均值为零的均匀分布的随机变量,但标准差1/12≈0.2886 {displaystyle 1/{/sqrt {12}}/approx 0.2886}。{\displaystyle 1/{\sqrt {12}}\approx 0.2886},这比简单预测法的1/2标准差要好,但比简单随机法的标准差略高。然而,n个四舍五入数之和将是一个预期误差为零的随机变量,但标准差为n / 12 {\displaystyle {\sqrt {n}}/{\sqrt {12}}}}。{\displaystyle {\sqrt {n}}/{\sqrt {12}}}(总剩余噪声),它以半二次方的方式发散,可能会变得很容易被察觉,即使每个样本的舍入误差的标准差将是1 / 12 n {\displaystyle 1/{\sqrt {12n}}{\displaystyle 1/{\sqrt {12n}}}它慢慢地以半二次方的方式收敛为零。所以,对于一些对大量数据进行舍入的应用来说,这个随机分布可能还是太高了。

多维抖动

这种简单抖动法的变体仍然以等于其分数的概率对数值进行舍入。但是,不是使用随机分布对孤立的样本进行舍入,而是将每个被舍入的样本所发生的舍入误差累加到下一个要取样或计算的周围元素中;然后将这个累加值加到这些下一个要舍入的取样或计算值的值上,这样,修改后的值将使用预测模型(如Floyd-Steinberg抖动)考虑到这个差异。

然后将修改后的值用上述任何一种四舍五入方法进行四舍五入,最好的方法是用随机法或抖动法:在最后一种情况下,n个四舍五入数的总和仍将是一个预期误差为零的随机变量,但具有极好的恒定标准差1 / 12 {/displaystyle 1/{/sqrt {12}}}。{\displaystyle 1/{\sqrt {12}}},而不是抖动孤立样本时的半二次方程发散;而且每个圆角样本的总体平均圆角误差偏差将为1 / ( n 12 ) {\displaystyle 1/(n{\sqrt {12}})}{\displaystyle 1/(n{\sqrt {12}})}将双曲收敛为零,比抖动孤立样本时的半双曲收敛更快。

在实践中,当对大型采样数据集进行舍入时(如音频、图像和视频渲染),舍入误差的累积最常用的是对修改后的值进行简单的预测性舍入(如向零舍入),因为它仍将保留总体平均舍入误差偏差及其标准差向零的双曲收敛性。这种增强功能经常用于图像和音频处理(特别是用于精确的重新缩放和抗锯齿操作,其中孤立值的简单概率抖动仍可能产生可察觉的噪声,有时甚至比应用于孤立样本的简单非概率舍入方法发生的moiré效应更糟糕)。

累积的圆角误差的有效传播可能取决于要圆角的采样数据的离散维度:当采样二维图像,包括彩色图像(增加了彩色平面的离散维度),或三维视频(增加了时间的离散维度),或在多声道音频数据上(使用时间和通道的离散维度),可能仍然优选将该误差传播到优选的方向,或同样传播到几个正交维度,例如对于二维图像的垂直与。二维图像的水平方向,或在同一位置和/或时间戳处进入平行的颜色通道,并取决于这些正交离散维度的其他属性(根据感知模型)。在这些情况下,可以使用几个圆角误差累加器(每个离散维度至少一个),或者使用(n-1)维度的累加器向量(或矩阵)。

在其中的一些情况下,要采样和圆周的数据的离散维度可以被非正交地处理。例如,当处理彩色图像时,每个物理维度(高度、宽度和可选的时间)中的三色平面数据可以使用感知色彩模型进行重新映射,因此舍入误差累积器将被设计为以比色调或饱和度更高的概率保存亮度,而不是将误差独立地传播到每个正交色彩平面。在立体声音频数据中,两个被舍弃的数据通道(左和右)可以被舍弃在一起,以优先于它们的有效差值来保存它们的平均值,而它们的有效差值将以围绕零的平衡方式吸收大部分剩余的舍弃误差。

简单分数的四舍五入

在某些情况下,人们希望将一个给定的数字x四舍五入到一个"整齐"的分数--即分子m和分母n不超过给定最大值的最接近的分数z=m/n。这个问题与将一个值四舍五入到固定数量的十进制或二进制数字,或四舍五入到给定单位m的倍数的问题相当不同。这个问题与Farey序列、Stern-Brocot树和连续分数有关。

按比例四舍五入

这种类型的四舍五入,也被命名为按对数比例四舍五入,是四舍五入到指定增量的一种变体,但增量要根据结果的比例和幅度进行修改。具体来说,其目的是限制有意义的数字的数量,对数值进行四舍五入,这样非有意义的数字就会被删除。这种四舍五入的方式隐含在精度有限的浮点值计算中(如IEEE-754浮点数双数类型),但它可以更广泛地用于四舍五入任何有意义数字的正数和任何严格的正实数。

例如,它可以在工程图形中用于表示具有可变步长的对数刻度的数据(例如波长,其基数不一定是整数),或者在统计数据中用于定义指数增长宽度的区间内的实值类别(但最常见的用途是使用整数基数,如10或2)。(但最常见的用法是整数基,如10或2)。

这种类型的四舍五入是基于一个对数刻度,由一个固定的非零实数缩放因子s(在最常见的情况下,这个因子是s=1)和一个固定的正数基数b>1(不一定是一个整数,最常见的情况是与缩放因子不同),以及该基数中一个固定的整数n>0的有意义的数字(这将决定用于四舍五入的增量值,以及计算出的四舍五入数的有效刻度)。

主要参数数(以及由此产生的四舍五入数)首先用指数符号x=s-a-m-bc表示,这样符号s是+1或-1,绝对尾数a限于半开的正区间[1/b,1),指数c是任何(正或负)整数。在这种表示方法中,所有重要的数字都在绝对值的小数部分,其整数部分总是零。

如果源数(或四舍五入数)为0,则绝对值mantisssa a被定义为0,指数c被固定为一个任意值(大多数约定为0,但有些浮点表示法不能使用空的绝对值mantissa,而是为指数c保留一个特定的最大负值来表示数字0本身)。而符号s可以在-1或+1之间任意选择(对于简单的零,一般设置为+1,如果数字表示法允许区分正零和负零,则设置为与四舍五入值中的参数相同的符号,即使它们最终表示的是同一个数值0)。

也可以等效地使用按比例的指数表示法x=a-s-bc,符号母线a要么等于零,要么在两个半开区间(-1,-1/b]和[+1/b,+1)中的一个范围内,下面的算法就是这种情况。

计算这种比例取舍的步骤一般类似于下面的步骤。

  1. 如果x等于0,简单地返回x;否则。
  2. x转换为带符号的指数表示法。
    x = a
    s b c {/displaystyle x=a/cdot s/cdot b^{c}/}。 {\displaystyle x=a\cdot s\cdot b^{c}\,}
    1. x'x的未缩放值,将其除以缩放因子s
      x ′ = x / s {\displaystyle x'=x/s/\,}
      {\displaystyle x'=x/s\,} ;
    2. 让缩放指数c是1加上x'绝对值的基数b对数,四舍五入到一个整数(朝向负无穷大)。
      c = 1 +
      ↪Ps_230A↩ log b | x ′ | = 1 + ↪Ps_230A↩ log b | x / s | {\displaystyle c=1+\left/lfloor \log _{b}\left|x'/right|/right\rfloor =1+\left/lfloor \log _{b}\left|x/sright|/right\rfloor \,}{\displaystyle c=1+\left\lfloor \log _{b}\left|x'\right|\right\rfloor =1+\left\lfloor \log _{b}\left|x/s\right|\right\rfloor \,} ;
    3. 让有符号的咒语ax'除以b的乘积,以c为幂。
      a = x ′
      b - c = x / s b - c {\displaystyle a=x'\cdot b^{-c}=x/s\cdot b^{-c}\,}。 {\displaystyle a=x'\cdot b^{-c}=x/s\cdot b^{-c}\,}
  3. 计算此表示法中的四舍五入值。
    1. c'x'的初始缩放指数c
      c′=c {\displaystyle c'=c,}。
      {\displaystyle c'=c\,}
    2. m成为根据要保留的有效数字的数量对咒语a进行四舍五入的增量。
      m = b - n {\displaystyle m=b^{-n},\,}。
      {\displaystyle m=b^{-n}\,}
    3. a'是根据这个增量m和选择的四舍五入模式四舍五入的有符号的咒语a
      a ′ = r o u n d ( a , m ) = r o u n d ( x / s
      b n - c ′ ) b - n {\displaystyle a'=\mathrm {round} (a,m)=\mathrm {round} (x/s\cdot b^{n-c'})\cdot b^{-n},}。 {\displaystyle a'=\mathrm {round} (a,m)=\mathrm {round} (x/s\cdot b^{n-c'})\cdot b^{-n}\,}
    4. 如果a'的绝对值不低于b,则递减n(将增量m乘以b),递增缩放指数c',将有符号的万字符a除以b,然后用同样的公式重新开始将新的有符号的万字符a舍入a';只有当abtract"round()"函数总是将a舍入到0时(即当它是一个简单的截断时),才可以避免这一步。但如果是简单的截断,则有必要,因为在这种情况下,四舍五入后的万字符可能会有更高的缩放指数,留下一个额外的精度数字。
  4. 返回四舍五入的值。
    y = s c a l e d r o u n d ( x , s , b , n ) = a ′
    s b c ′ = r o u n d ( x / s b n - c ′ ) s b c ′ - n {\displaystyle y=\mathrm {scaledround} (x,s,b,n)=a'cdot scdot b^{c'}=/mathrm {round} (x/scdot b^{n-c'})cdot scdot b^{c'-n},} {\displaystyle y=\mathrm {scaledround} (x,s,b,n)=a'\cdot s\cdot b^{c'}=\mathrm {round} (x/s\cdot b^{n-c'})\cdot s\cdot b^{c'-n}\,}.

对于抽象的"round()"函数,这种类型的舍入可以使用下一节更完整地描述的任何一种对整数的舍入模式,但最常见的是舍入到最近的模式(平局规则也在下面更完整地描述)。

例如:

  • 当使用任何四舍五入到最近的模式时,将返回1.234,缩放因子为1,基数为10,有3个重要数字(最大相对精度=1/1000),将返回1.23。
  • 类似的按比例取整1.236将返回1.24。
  • 类似的按比例取整21.236将返回21.2。
  • 类似的按比例取整321.236将返回321。
  • 当使用四舍五入模式时,在10位基数和3位有效数字中的缩放因子1.234的四舍五入(最大相对精度=1/1000),将返回1.23。
  • 类似的按比例取整1.236也将返回1.23。
  • 3 π / 7 ≈ 6.8571 π 2 - 4 {\displaystyle \scriptstyle 3pi /7 \;\approx \;6.8571cdot \pi \cdot 2^{-4}{\displaystyle \scriptstyle 3\pi /7\;\approx \;6.8571\cdot \pi \cdot 2^{-4}}}的缩放因子π {displaystyle \scriptstyle \pi }{\displaystyle \scriptstyle \pi }的基数为2和3个有效数字(最大相对精度=1/8),当使用四舍五入模式时,将返回6 π 2 - 4 = 3 π / 8 {displaystyle \scriptstyle 6cdot \pi \cdot 2^{-4}/;=\;3/pi /8{\displaystyle \scriptstyle 6\cdot \pi \cdot 2^{-4}\;=\;3\pi /8}}
  • 类似的比例取整5 π / 7≈5.7143 π 2 - 3 {\displaystyle \scriptstyle 5pi /7\;\approx \;5.7143\cdot \pi \cdot 2^{-3}}{\displaystyle \scriptstyle 5\pi /7\;\approx \;5.7143\cdot \pi \cdot 2^{-3}}将返回5 π 2 - 3 = 5 π / 8 {\displaystyle \scriptstyle 5cdot \pi \cdot 2^{-3}};=\;5\pi /8} {\displaystyle \scriptstyle 5\cdot \pi \cdot 2^{-3}\;=\;5\pi /8}
  • 类似的π / 7≈4.5714 π 2 - 5 {\displaystyle \scriptstyle \pi /7\;\approx \;4.5714\cdot \pi \cdot 2^{-5}}{\displaystyle \scriptstyle \pi /7\;\approx \;4.5714\cdot \pi \cdot 2^{-5}}将返回4 π 2 - 5 = π / 8 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=;\pi /8{\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8}}
  •  
  • 类似的π/15≈4.2667 π 2 - 6 {\displaystyle \scriptstyle \pi /15/\;\approx \;4.2667\cdot \pi \cdot 2^{-6}}{\displaystyle \scriptstyle \pi /15\;\approx \;4.2667\cdot \pi \cdot 2^{-6}}将返回4 π 2 - 6 = π / 16 {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-6}/;=;\pi /16}。{\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-6}\;=\;\pi /16}.

四舍五入至可用值

成品材、书写纸、电容器和许多其他产品通常只以几种标准尺寸出售。

许多设计程序描述了如何计算一个近似值,然后用"四舍五入"到某个标准尺寸,如"四舍五入到最近的标准值"、"四舍五入到最近的标准值"或"四舍五入到最近的标准值"。

当一组优选值在对数刻度上的间距相等时,选择最接近任何给定值的优选值可以看作是一种比例取舍。这种"四舍五入"的值可以直接计算出来。

浮点进位

在浮点运算中,四舍五入的目的是将给定的值x转化为具有特定位数的值z,换句话说,z应该是数字m的倍数,这取决于z的大小。换句话说,z应该是一个数字m的倍数,这个数字m取决于z的大小

除了这个细节之外,上面讨论的所有四舍五入的变体也适用于浮点数的四舍五入。这种四舍五入的算法在上面的标度四舍五入一节中介绍,但标度系数s=1,整数基数b>1。

对于四舍五入的结果会溢出的结果,根据四舍五入的方向,定向四舍五入的结果要么是适当的有符号的无穷大,要么是最高的可表示的正有限数(如果x是负数,则是最低的可表示的负有限数)。通常四舍五入到偶数的溢出结果总是适当的无穷大。

此外,如果四舍五入的结果会出现下溢,即如果指数超过了最低可表示的整数值,那么有效结果可能是零(如果表示方式能够保持零的符号区别,则可能是有符号的),或者是最小的可表示的正有限数(如果x是负数,则是最高的可表示的负有限数),可能是一个正负数(如果口令存储的是所有有意义的数字。在这种情况下,通过将存储的最高位数设置为0,最重要的数字仍然可以存储在较低的位置,并且这个存储的咒语不会掉落最重要的数字,这在基数b=2时是可能的,因为在该基数中最重要的数字总是1),这取决于四舍五入的方向。通常四舍五入到偶数的情况下,下溢的结果总是适当的0。

双重四舍五入

将一个数字连续四舍五入两次到不同的精度,后一个精度较粗,不能保证与四舍五入一次到最终精度的结果相同,除非是定向四舍五入的情况。例如将9.46四舍五入到一位小数,得到的结果是9.5,然后用四舍五入半数到偶数的方法取整数时得到10,但直接取整数时将得到9。

一些计算机语言和IEEE 754-2008标准规定,在简单的计算中,结果不应四舍五入。这一直是Java的一个特殊问题,因为它的设计是为了在不同的机器上完全相同地运行,不得不使用特殊的编程技巧来实现x87浮点运算。Java语言被修改为允许在差别不大的情况下使用不同的结果,并要求在结果必须准确符合时使用"strictfp"限定符。

四舍五入的精确计算

可以使用四舍五入的算术来评估一个函数的精确值,其域和范围是离散的。例如,如果我们知道一个整数n是一个完全平方,我们可以通过将n转换为一个浮点值x,用浮点计算x的近似平方根y,然后将y四舍五入到最接近的整数q来计算它的平方根,如果n不是太大,y的浮点四舍五入误差将小于0.5,所以四舍五入的值q将是n的精确平方根,在大多数现代计算机中,这种方法可能比用全整数算法计算n的平方根快得多。

制表师的困境

William Kahan创造了"制表人的困境"这个术语,以表示对超越函数进行舍入的未知成本。

"没有人知道,两个浮点参数不溢出/不溢出时,计算y^w的正确四舍五入需要花费多少钱,相反,著名的数学库计算基本的超越函数大多在半个ulp以内,几乎总是在一个ulp以内。相反,著名的数学库在计算基本的超函数时,大部分都在半个ulp以内,几乎总是在一个ulp以内。为什么Y^W不能像SQRT那样在半ulp内取整?因为没有人知道这需要多少计算量......没有一般的方法可以预测有多少额外的数字需要被携带来计算一个超验表达式,并将其正确地四舍五入到一些预先分配的数字。即使是一个事实(如果是真的),即有限数量的额外数字最终将足够,也可能是一个深奥的定理。"

IEEE浮点标准保证加、减、乘、除、平方根和浮点余数将给出无限精度运算的正确四舍五入结果。然而,对于更复杂的函数,没有给出这样的保证,它们通常最多只能精确到最后一位之内。

利用Gelfond-Schneider定理和Lindemann-Weierstrass定理,可以证明许多标准的基本函数在给定有理非零参数时,可以返回超越的结果;因此总是可以正确地对这些函数进行舍入。然而为给定精度确定一个极限,即在保证正确的四舍五入结果之前需要计算多精确的结果,可能需要大量的计算时间。

现在有一些包可以提供全精度。MPFR包可以提供正确的四舍五入的任意精度结果。IBM已经写了一个快速准确的IEEE基本函数的包,将来标准库可能会提供这样的精度。

有可能设计出定义明确的可计算数,而这些数无论计算多少位数,都可能永远无法正确地舍入。例如,如果哥德巴赫猜想是真的但不可证明,那么就不可能正确地舍入0.5+10-n,其中n是第一个大于4的偶数,而且不是两个质数之和,或者0.5,如果没有这样的数。然而,即使猜想不成立,这也可以被近似到任何给定的精度。

历程

四舍五入的概念非常古老,甚至可能比除法的概念还要古老。在美索不达米亚发现的一些古老的泥板上有以60为基数的倒数和平方根的四舍五入值的表格。π、年的长度和月的长度的四舍五入的近似值也很古老。

自1940年以来,四舍五入法一直作为ASTM(E-29)标准。无偏四舍五入统计学四舍五入这两个术语的由来是不言自明的。在1906年第4版的《概率与误差理论》中,Robert Simpson Woodward将其称为"计算机规则",说明当时计算数学表格的人类计算机普遍使用这一规则。Churchill Eisenhart在1947年发表的论文"Effects of Rounding or Grouping Data"(载于Selected Techniques of Statistical Analysis,McGrawHill,1947年,Eisenhart、Hastay和Wallis编著)指出,这种做法在数据分析中已经"很成熟"。

"银行家四舍五入"一词的来源仍然比较模糊。如果说这种四舍五入方法曾经是银行业务的标准,那么证据极难找到。相反,欧洲委员会报告《欧元的引入和货币金额的四舍五入》第2节表明,以前银行业务中并没有标准的四舍五入方法;并规定"半数"金额应四舍五入。

在20世纪80年代以前,浮点计算机算术中使用的进位方法通常是由硬件固定的,记录不全,不一致,而且每个品牌和型号的计算机都不一样。这种情况在IEEE 754浮点标准被大多数计算机制造商采用后得到了改变。该标准允许用户在几种四舍五入模式中进行选择,并且在每一种情况下,都精确地规定了结果应该如何四舍五入。这些特点使数值计算更可预测,更不依赖机器,并使有效和一致地实现区间算术成为可能。

编程语言中的四舍五入功能

大多数编程语言提供了函数或特殊语法,以各种方式对小数进行四舍五入。最早的数字语言,如FORTRAN和C语言,只提供一种方法,通常是截断(向零)。这种默认的方法可以在某些情况下隐含在其中,比如将小数赋值给一个整数变量,或者使用小数作为数组的索引。其他类型的四舍五入必须明确编程;例如,将一个正数四舍五入到最接近的整数,可以通过加0.5和截断来实现。

然而,在过去的几十年里,大多数语言的语法和/或标准库已经普遍提供了至少四个基本的四舍五入函数(上/顶、下/底、到最近和朝向零)。平分方法可能因语言和版本的不同而不同,和/或可由程序员选择。一些语言遵循IEEE-754浮点标准,将这些函数定义为接收一个双精度浮点参数,并返回相同类型的结果,必要时可以将其转换为整数。由于IEEE双精度格式有52个分数位,这种方法可以避免32位整数语言的虚假溢出。一些语言,如PHP,提供了将一个值四舍五入到指定数量的小数点的函数,例如从4321.5678到4321.57或4300。此外,许多语言都提供了"printf"或类似的字符串格式化函数,允许将小数转换为字符串,四舍五入到用户指定的小数位数(精度)。另一方面,截断(四舍五入到零)仍然是许多语言使用的默认四舍五入方法,特别是对两个整数值的除法。

相反,CSS和SVG没有为数字和测量定义任何特定的最大精度,这些数字和测量在它们的Document Object Model和Interface-description-language接口中被当作字符串来处理和暴露,就像它们具有无限精度一样,并且不区分整数和浮点值;然而,这些语言的实现通常会将这些数字转换为IEEE-754双浮点,然后再以有限的精度暴露计算出的数字(特别是在标准Javascript或ECMAScript接口绑定中)。

其他四舍五入标准

一些学科或机构已经发布了四舍五入的标准或指令。

美国天气观测

美国联邦气象协调员办公室在1966年年中发布的指导意见中确定,天气数据应四舍五入到最接近的整数,采用"四舍五入半上"的平局规则。例如,1.5四舍五入的整数应该变成2,-1.5应该变成-1。在这之前,平局规则是"离零整半"。

气象学中的负零

有些气象学家可能写"-0"来表示0.0至-0.5度(不含)之间的温度,并将其四舍五入为整数。当负号被认为是重要的时候,不管幅度有多小,都会使用这种符号;例如,在摄氏度的温度四舍五入时,零度以下表示冰冻。[]

相关网页

问题和答案

问:"四舍五入 "这个词是什么意思?
答:四舍五入是指用另一个近似相等但形式更短、更简单或更明确的数值来代替一个数值。

问:舍入的例子是什么?
答:四舍五入的一个例子是将23.74美元四舍五入为24美元,将分数312/937四舍五入为1/3,将表达式2 {displaystyle {sqrt {2}}四舍五入为1.41。

问:我们为什么要对数字进行四舍五入?
答:我们对数字进行四舍五入,是为了得到一个比原来更容易书写和处理的数值。这也可能是为了表明一个计算的数字的准确性。

问:四舍五入有哪些潜在的问题?
答:四舍五入可能会因此引入一些舍入误差,在某些情况下,由于误差在计算中长期积累,可能会使结果失去意义。此外,对超越式数学函数进行准确的四舍五入可能很困难,因为不可能事先知道需要计算多少个额外的数字来解决是向上还是向下取整。

问:四舍五入与量化的关系如何?
答:四舍五入与量化有很多相似之处,当物理量必须用数字或数字信号进行编码时,就会出现四舍五入。

AlegsaOnline.com - 2020 / 2023 - License CC3