繁体   English   中英

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

[英]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/2551/255y/1000的最接近倍数,则将y/1000255相乘并四舍五入将产生x

如果x/255 = y/1000 ,则显然是1/255的最接近倍数。 否则, x/255必须的距离内1/2000y/1000到轮到y/1000 ,所以最接近的多个1/255上的另一侧y/1000必须至少一个距离1/255 - 1/2000远于x/255 因此, x/2551/255y/1000的最接近倍数,并且3位数字就足够了。 类似地,对于具有n位数字的任何分母dn个小数位就足够了(如果d是10的幂,则n-1个小数位就可以了)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM