python中相同计算的矛盾值

python中相同计算的矛盾值,python,numpy,numbers,Python,Numpy,Numbers,考虑以下两个结果 import numpy as np (1/21) * np.log( (1/21) / (3/21) * (3/21)) 导致 -0.14497725893921062 计算方法如下 import numpy as np x = 0.14285714285714285 y = 0.14285714285714285 xy = 0.047619047619047616 xy * np.log(xy / (x * y)) 导致 0.040347517161295

考虑以下两个结果

import numpy as np

(1/21) * np.log( (1/21) / (3/21) * (3/21))
导致

-0.14497725893921062

计算方法如下

import numpy as np

x  = 0.14285714285714285
y  = 0.14285714285714285
xy   = 0.047619047619047616

xy * np.log(xy / (x * y))
导致

0.040347517161295414

两种计算方法是相同的,但结果有很大的差距。这里的问题是什么


如果这不是一个主观问题,那么建议使用哪一种?

因为乘法和除法在Python中具有相同的优先级,Python从左到右读取它们

例如:

x, y, z = 2, 4, 8
这些是完全不同的:

x / y * z == x / (y * z)
>>>False
左侧为4.0,右侧为0.0625

附言:

括号具有最高优先级,可用于强制表达式按所需顺序求值


可能会帮助您理解Python是如何管理数字的。@hanugm您在第一个等式
((3/21)*(3/21))