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

exo*_*ter 1 python floating-point precision floating-accuracy

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

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

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

use*_*ica 5

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

假设我们有一个数字x/255,我们在小数点后显示3位数,有效地将其四舍五入到某个数字y/1000.乘y/1000255和四舍五入会产生x,如果x/255是最接近的倍数1/255y/1000.

如果x/255 = y/1000,那么它显然是最接近的倍数1/255.否则,x/255必须在距离内1/2000y/1000舍入到y/1000,所以最接近的倍数1/255上的另一侧y/1000必须是至少一个距离1/255 - 1/2000远,进一步比x/255.因此,x/255是最接近多1/255y/1000和3位数字是不够的.类似地,对于任何dn数字的分母,n小数位应该足够(如果d是10的幂,n-1小数位应该这样做).

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