[英]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个不同的值。 三位数怎么样?
假设我们有一个数字x/255
,我们将其显示为小数点后3位,有效地将其舍入为某个数字y/1000
。 如果x/255
是1/255
与y/1000
的最接近倍数,则将y/1000
与255
相乘并四舍五入将产生x
。
如果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位数字就足够了。 类似地,对于具有n
位数字的任何分母d
, n
个小数位就足够了(如果d
是10的幂,则n-1
个小数位就可以了)。
(在此推导中,我忽略了隐式浮点舍入误差的影响。对于小分母,浮点舍入误差不应更改此分析。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.