python中的精确除法

时间:2018-12-07 12:15:02

标签: integer intervals division

我是python的新手,我写了一个程序,将值从[-7000,18000]间隔缩放到[-1,1]间隔。

desired_upper_bound = 1.0
desired_lower_bound = -1.0
max_value = 18000.0
min_value = -7000.0
value = -7000.0
slope = (desired_upper_bound - desired_lower_bound) / (max_value - min_value)
print(slope)
intercept = desired_upper_bound - (slope * max_value)
print(intercept)
transformed_value = slope * value + intercept
print(transformed_value)

尽管控制台提供:-1.0000000000000002,“ transformed_value”的确切结果应为-1。对于我的其余工作,如果值不在间隔内,可能会导致很多问题,因此我想知道如何解决此问题。

我希望计算出正确的数学结果“ 1”并显示在控制台中。我在做什么错了?

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为浮点运算不精确。在维基百科上引用floating-point arithmetic article

  

浮点算术(FP)是使用公式的算术   实数表示为近似值,以便支持   在范围和精度之间进行权衡。

由于这只是一个近似值,因此您会遇到类似的情况。如果您想将某些数字强加到特定的间隔中,则可以检查它们是否不超过该数字,如果超过,则可以按以下方式四舍五入:

if transformed_value <= -1:
    transformed_value = round(transformed_value)