表示[0,255]范围内的值所需的最小小数位数

时间:2016-05-09 17:37:20

标签: python floating-point precision floating-accuracy

假设我在区间[0.0, 1.0]中有一个表示为字符串的浮点数。我们将此值称为floatstr。我们还假设该值表示区间[0, 255]中的整数。

floatstr转换为整数的公式是(在python中): int(round(float(floatstr)*255))

floatstr准确表示此值所需的最小小数点数是多少?如果有这样的公式,那么如何计算这个最小数量?

1 个答案:

答案 0 :(得分:5)

两位数显然不会削减它。您只能代表100个不同的值。 3位数怎么样?

假设我们有一个数字x/255,我们将其显示为小数点后的3位数,有效地将其四舍五入为y/1000。如果y/1000255x的最接近倍数,则将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}}必须至少距1/255 - 1/2000远,而不是x/255。因此,x/2551/255y/1000的最接近倍数,3位数就足够了。同样,对于d位数为n的任何分母,n小数位应该足够(如果d是10的幂,n-1小数位应该做它)。

(我忽略了隐式浮点舍入误差在此推导中的影响。对于小分母,浮点舍入误差不应改变此分析。)