假设我在区间 [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
小数位应该足够了)。
(我在这个推导中忽略了隐式浮点舍入误差的影响。对于小分母,浮点舍入误差应该不会改变这个分析。)
关于python - 表示 [0, 255] 范围内的值所需的最小小数位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37122050/