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

Minimum number of decimal places needed to represent a value in the range [0, 255]

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

中的整数

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

floatstr 中要准确表示此值所需的最小小数位数是多少?这个最小值是怎么算出来的,有公式吗?

两位数显然不行。您只能表示 100 个不同的值。 3位数怎么样?

假设我们有一个数字 x/255,我们将其显示为小数点后 3 位数字,有效地将其四舍五入为某个数字 y/1000。如果 x/2551/255 最接近 y/1000 的倍数,则将 y/1000 乘以 255 并四舍五入将得到 x

如果x/255 = y/1000,那么显然是1/255的最接近倍数。否则,x/255必须在y/10001/2000的距离内才能四舍五入到y/1000,所以1/255的最接近的倍数在[=的另一边11=] 必须至少有 1/255 - 1/2000 距离,比 x/255 更远。因此,x/2551/255最接近y/1000的倍数,3位就够了。类似地,对于具有 n 位的任何分母 dn 位小数应该足够(如果 d 是 10 的幂,则 n-1 位小数应该去做吧)。

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