多少位小数才能给出准确的结果

问题描述 投票:0回答:1

假设我有两个小数 a 和 b,每个都有两位小数。我现在想确定一个因子 x,乘以 a,得到 b。这是 x = b / a

有什么方法可以计算 b = a * x 的结果精确到小数点后两位(不四舍五入)所需的最小小数位数吗?

示例:

a = 76,33
b = 44,12 

x1 = 0,5780165072710599 (16 decimal places)
b1 = 76,33 * 0,5780165072710599
b1 = 44,120000000000002167

x2 = 0,578016507271059 (15 decimal places)
b2 = 76,33 * 0,578016507271059
b2 = 44,11999999999993347

x3 = 0,57801650727106 (14 decimal places; rounded)
b3 = 76,33 * 0,57801650727106
b3 = 44,1200000000000098

x4 = 0,5780 (4 decimal places; rounded like GAAP)
b4 = 76,33 * 0,5780
b4 = 44,11874

x5 = 0,5781 (4 decimal places; corrected, not rounded)
b5 = 76,33 * 0,5781
b5 = 44,126373‬ (it's 44,12* now, but far more away from 44,120 than the previous 44,11874)

“公认会计原则 (GAAP)”建议保留四位小数,以抵消舍入误差。然而,就我而言,我发现在求和和乘以大量数字时,这会导致严重的舍入问题。

以 b4 = 44,11874 为例,现在预订该仓位的 1.000.000 倍。您最终得到 44.118.740。如果 b1 = 44,120000000000002167,总和将为 44.120.000。差异已经是 1.260,这已经对货币金额产生了影响。

是否可以计算出安全起见所需的最小小数位数?

math rounding precision
1个回答
0
投票

您有以下精确的数学方程:

x = b / a

然而,当你四舍五入

x
时,你最终会得到:

x' = x + e

其中

e
是一个错误项。

如果将

x
四舍五入到 k 位小数,则
e
将介于 -1/(2 10^k) 和 +1/(k 10^k) 之间。例如,如果将
x
四舍五入到小数点后 4 位,则
e
将介于 -0.00005 和 +0.00005 之间。

然后,当您尝试使用

b
而不是
x'
重新计算
x
时,您会得到一个值
b'
,其中也有一个错误项:

b' = a x' = a x + a e = b + a e

b'
上的错误项现在是
a e

因此,如果您希望

b'
上的误差项最多为 1 / 200,以便
b'
四舍五入到
b
小数点后两位,那么您需要
x'
上的误差项最多为 1 /(200 个)。

在大多数示例中,

a
始终小于 100,因此四舍五入到小数点后 4 位就很好了。

但在最后一个示例中,

a
是 1000000,因此
x
需要 8 位小数。

© www.soinside.com 2019 - 2024. All rights reserved.