如何解释,计算和/或存储数据类型?

时间:2017-12-07 04:31:09

标签: python

在python中,假设代码为:

import.math

a = math.sqrt(2.0)

if a * a == 2.0:
    x = 2
else:
    x = 1

2 个答案:

答案 0 :(得分:2)

这是&#34的变体;浮点数是近似值 - 不完全"。

从数学上讲,你是正确的sqrt(2)* sqrt(2)== 2.但sqrt(2)可以完全表示为本机数据类型(读取:浮点数)。 (Heck, the sqrt(2) is actually guaranteed to be an infinite decimal!)。它可以变得非常接近但不准确:

>>> import math
>>> math.sqrt(2)
1.4142135623730951
>>> math.sqrt(2) * math.sqrt(2)
2.0000000000000004

请注意,结果实际上不是正是2。

如果您希望执行x = 2分支,则需要使用&#34的 epsilon 值;结果是否足够接近?":

epsilon = 1e-6    # 0.000001
if abs(2.0 - a*a) < epsilon:
    x = 2
else:
    x = 1

答案 1 :(得分:1)

带小数的数字存储为浮点数,在某些情况下它们只能是实数的近似值。

所以你的比较需要不是&#34;这两个数字是否完全相等(==)&#34;但是&#34;他们是否足够接近以至于被视为平等&#34;。

幸运的是,在数学库中,有一个方便的功能。使用isClose(),您可以与定义的容差进行比较。这个功能并不复杂,你可以自己动手。

math.isclose(a*a, 2, abs_tol=0.0001)
>> True