处理 Python3 中的浮点数
Handling floating-point numbers in Python3
我是一位经验丰富的 R 用户,几天以来我一直在尝试自学 Python3。 Python 处理浮点数的方式一开始让我很困惑。例如,
print(1.1+2.2==3.3)
将returnFalse
。我知道我可以解决这个“问题”Python 如何使用十进制模块解释浮点数。
import decimal as d
print(d.Decimal("1.1")+d.Decimal("2.2")==d.Decimal("3.3"))
将 return True
这正是我想要的。
但这如何与变量或其他函数一起工作?例如,我想计算以下矩阵的行列式:
import numpy as np
from numpy import linalg
A = np.array([[1,2],[3,4]])
Det_A = np.linalg.det(A)
print(Det_A)
结果是 -2.0000000000000004 但我希望结果正好是 -2。我该怎么做?
请原谅我不严谨的语言,我不是计算机科学家。欢迎任何建议。
您的应用程序可以强制转换为整数吗? print(int(Det_A))
或只打印小数点后 2 位数字print({:.2f}".format(Det_A))
SciPy 似乎能够比 NumPy 更准确地计算行列式。例如:
import numpy as np
from scipy import linalg
A = np.array([[1,2],[3,4]], dtype=float)
print(np.linalg.det(A)) # => -2.0000000000000004
print(linalg.det(A)) # => -2.0
我不确定这在一般情况下是否属实,但使用 SciPy 版本 因此这在可能的情况下似乎是合理的。例如。如果你正在制作一个 Docker 容器并且引入 SciPy 的唯一原因是为了获得更准确的行列式那么我不会这样做,但是当在本地工作或者如果使用更多功能那么它是可能值得使用 SciPy.
另请注意,R 在使用浮点数学时遇到相同的问题,例如,在 R 中输入 1.1 + 2.2 == 3.3
时,我得到 FALSE
返回。这可以通过计算 [=13] 来确认=],在 R 中输出:
4.440892e-16
而 Python 给出:
4.440892098500626e-16
这些是相同的值,只是 Python 显示结果更精确。
我是一位经验丰富的 R 用户,几天以来我一直在尝试自学 Python3。 Python 处理浮点数的方式一开始让我很困惑。例如,
print(1.1+2.2==3.3)
将returnFalse
。我知道我可以解决这个“问题”Python 如何使用十进制模块解释浮点数。
import decimal as d
print(d.Decimal("1.1")+d.Decimal("2.2")==d.Decimal("3.3"))
将 return True
这正是我想要的。
但这如何与变量或其他函数一起工作?例如,我想计算以下矩阵的行列式:
import numpy as np
from numpy import linalg
A = np.array([[1,2],[3,4]])
Det_A = np.linalg.det(A)
print(Det_A)
结果是 -2.0000000000000004 但我希望结果正好是 -2。我该怎么做?
请原谅我不严谨的语言,我不是计算机科学家。欢迎任何建议。
您的应用程序可以强制转换为整数吗? print(int(Det_A))
或只打印小数点后 2 位数字print({:.2f}".format(Det_A))
SciPy 似乎能够比 NumPy 更准确地计算行列式。例如:
import numpy as np
from scipy import linalg
A = np.array([[1,2],[3,4]], dtype=float)
print(np.linalg.det(A)) # => -2.0000000000000004
print(linalg.det(A)) # => -2.0
我不确定这在一般情况下是否属实,但使用 SciPy 版本
另请注意,R 在使用浮点数学时遇到相同的问题,例如,在 R 中输入 1.1 + 2.2 == 3.3
时,我得到 FALSE
返回。这可以通过计算 [=13] 来确认=],在 R 中输出:
4.440892e-16
而 Python 给出:
4.440892098500626e-16
这些是相同的值,只是 Python 显示结果更精确。