假设我在区间 [0.0, 1.0] 中有一个 float ,表示为一个字符串。我们将这个值称为 floatstr。我们还假设此值表示区间 [0, 255] 中的整数。
将 floatstr 转换为整数的公式是(在 python 中): int(round(float(floatstr)*255))
floatstr 中要准确表示此值所需的最小小数位数是多少?如果有公式,如何计算这个最小数量?
请您参考如下方法:
两位数显然不够用。您只能表示 100 个不同的值。 3 位数怎么样?
假设我们有一个数字 x/255 ,我们将其显示为小数点后 3 位数字,有效地将其四舍五入为某个数字 y/1000 .乘法 y/1000通过 255并将其四舍五入将产生 x如果x/255是最接近 1/255 的倍数至 y/1000 .
如果x/255 = y/1000 , 那么它显然是 1/255 最接近的倍数.否则,x/255必须在 1/2000 的距离内的 y/1000舍入为 y/1000 , 所以最接近 1/255 的倍数在y/1000的另一边必须至少有一个距离 1/255 - 1/2000远,比x/255还远.因此,x/255是最接近 1/255 的倍数至 y/1000 , 3 位数字就足够了。同样,对于任何分母 d与 n数字,n小数位应该足够了(如果 d 是 10 的幂,n-1 小数位应该足够了)。
(我在这个推导中忽略了隐式浮点舍入误差的影响。对于小分母,浮点舍入误差应该不会改变这个分析。)
