「ゼロから作るDeep Learning」でP.104の勾配を求める関数 numerical_gradient に関してです。

def f2(x):
    return x[0]**2 + x[1]**2


def numerical_gradient(f, x):
    h = 1e-4 
    grad = np.zeros_like(x)

    for idx in range(x.size):
        tmp_val = x[idx]
        x[idx] = tmp_val + h
        fxh1 = f(x)

        x[idx] = tmp_val - h
        fxh2 = f(x)

        grad[idx] = (fxh1 - fxh2)/(2*h)
        x[idx] = tmp_val

    return grad

f2の勾配をnumerical_gradientで求めたいのですが、

numerical_gradient(f2, np.array([3.0, 4.0]))
numerical_gradient(f2, np.array([3, 4]))

この2つで結果が変わる理由がわかりません。
なぜ下の方法だとうまくいかないのか、どなたかわかる方がいらっしゃれば教えてください。
よろしくおねがいします。