表示[0255]范围内的值所需的最小小数位数



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

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

floatstr中准确表示该值所需的最小小数位数是多少?如果有这样做的公式,这个最小数字是如何计算的?

两个数字显然不能切割它。你只能表示100个不同的值。三位数怎么样?

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

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

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

相关内容

  • 没有找到相关文章

最新更新