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

标签 python floating-point precision floating-accuracy

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

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

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

最佳答案

两位数显然不够用。您只能表示 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/255 - 1/2000远,比x/255还远.因此,x/255是最接近 1/255 的倍数至 y/1000 , 3 位数字就足够了。同样,对于任何分母 dn数字,n小数位应该足够了(如果 d 是 10 的幂,n-1 小数位应该足够了)。

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

关于python - 表示 [0, 255] 范围内的值所需的最小小数位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37122050/

相关文章:

python - Django 单元测试模拟

python - 如何获得复数论证与句点的角度?

javascript 大整数舍入因为精度? (为什么?)

c - IEEE-754: "smallest"溢出条件

Python 迭代,FOR 循环将列表传递给 MySQL 查询中的参数

C++ 声明独立于平台的 32 位 float

c++ - 关于C++中的 float 比较

c++ - 无法使用 <math.h> 中的 C/C++ nextafter/nexttoward 函数获取下一个 32 位浮点值

java - 为什么 Math 类中的 nextUp 方法会跳过一些值?

python - AWS lambda s3文件解压缩python中的文件名问题