为什么f(50)与f(50.0)根本不同?

时间:2019-03-20 08:29:34

标签: python floating-point int precision physics

我已经在Python 2.7.15中定义了一个函数,该函数接受两个输入(b,v),但是我注意到f(50,0.1)产生的结果与f(50.0,0.1)截然不同。这是函数:

def f(b,v):
    h=b*v/math.sqrt(1-v**2)
    def dJ_dp(J,p):
        return [J[1],-J[0]+3.0/2*J[0]**2+1/(2*h**2)]
    J0 = [0.0000001,1/b]
    ps = np.linspace(0,15,50)
    Js = odeint(dJ_dp, J0, ps)
    us = Js[:,0]
    return (ps,1/us)

我需要在dJ_dp内定义f(b,v),因为它需要值h。为什么输出如此不同?为什么它们根本不一样?

我的假设是,在定义h时出了点问题,但事实并非如此。

1 个答案:

答案 0 :(得分:1)

问题可能出在这里:J0 = [0.0000001,1/b]

如果b是整数50,则将使用整数除法来完成1/b,并得到0。如果b是浮点50.0,则将使用浮点除法完成操作,并得到0.02

您可以使用1.0代替1来强制进行浮点运算:

J0 = [0.0000001, 1.0/b]
# Here -----------^