gpt4 book ai didi

python - 执行算术代码时给出不寻常的结果

转载 作者:行者123 更新时间:2023-12-01 04:03:38 25 4
gpt4 key购买 nike

Python 脚本似乎执行了错误的算术。

import _thread
import time

def mult(pixel : int, multiplier : tuple) -> float:
"multiplies either r,g,b pixel by row vector (0.257, 0.504, 0.098),(-0.148,-0.291,0.439),(0.439,-0.368,-0.071))"

sum=0
for mul in multiplier:
sum += (pixel * mul)
print(sum)
return sum

redMul = [0.257, 0.504,0.098]
greenMul = [-0.148, -0.291, 0.439]
blueMul = [0.439, -0.368,-0.071]

redAdd = 16
greenAdd = 128
blueAdd = 128

try:
_thread.start_new_thread(mult,(1,blueMul))
except:
print("Error: unable to start thread")

代码输出:

0.439
0.07100000000000001
1.3877787807814457e-17

当期待时:

0.439 
0.071
0

此错误的原因是什么以及如何解决?

最佳答案

Python 脚本不会执行错误的算术,它只是浮​​点算术的方式。

使用float(Python 中的双浮点精度)时需要注意的主要原则是它是实际值的近似。除非该值的分母为 2 次幂 - 例如 1、2、4、0.5、0.25 等,否则该值无法用 float 精确表示。它始终是近似值,最多为第 15/16 位数字。

因此你的所有结果:

0.439
0.07100000000000001
1.3877787807814457e-17

正确...直到第 15/16 位有效数字,即:

0.439
0.0710000000000000
0.000000000000000 #(thus you have 1 e-17 as your 17-th digit)

float 不保证超出第 15/16 位数字的精度

如果您确实需要比 15-16 位数字更高的精度,请考虑使用十进制

关于python - 执行算术代码时给出不寻常的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36065086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com