假设我在区间[0.0, 1.0]
中有一个表示为字符串的浮点数。我们将此值称为floatstr
。我们还假设该值表示区间[0, 255]
中的整数。
将floatstr
转换为整数的公式是(在python中):
int(round(float(floatstr)*255))
floatstr
准确表示此值所需的最小小数点数是多少?如果有这样的公式,那么如何计算这个最小数量?
答案 0 :(得分:5)
两位数显然不会削减它。您只能代表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}}必须至少距1/255 - 1/2000
远,而不是x/255
。因此,x/255
是1/255
与y/1000
的最接近倍数,3位数就足够了。同样,对于d
位数为n
的任何分母,n
小数位应该足够(如果d
是10的幂,n-1
小数位应该做它)。
(我忽略了隐式浮点舍入误差在此推导中的影响。对于小分母,浮点舍入误差不应改变此分析。)