【问题标题】:Erro in sin function for pythonpython的正弦函数错误
【发布时间】:2021-03-02 21:35:19
【问题描述】:

我有一个关于使用正弦函数的问题。当我输入数字 4、8、.. 等时,我真的应该在非常接近零的地方得到数字,但不完全是(例如 0.001、0.0003 等)。但是,当 x = 4 时,我得到了数字 y = 1.224,当 x = 8 时,我得到了 y = -2.449。这应该是不正确的。我不明白这里的问题。有谁知道这里发生了什么?

[我的代码和罪图的照片 - 链接] https://ibb.co/6YCWW90

[代码]

导入数学 将 matplotlib.pyplot 导入为 plt 将 numpy 导入为 np

x = [0, 1, 2, 3, 4, 5, 6, 7, 8] y = [math.sin(0.25 * math.pi * i) for i in x] 打印(y)

plt.plot(x, y) plt.show()

【问题讨论】:

    标签: function trigonometry


    【解决方案1】:

    一切正常。

    当 i 为 0 时,“0.25 * math.pi * i”正好为 0,而当你计算正弦时,你得到的正是 0.0。

    当 i 为 4 时,计算“0.25 * math.pi * i”会得到一个非常接近 PI 的数字,但精度有限。如果你计算正弦,你会得到一个非常非常接近于零的数字,但由于精度有限,并不完全是零。结果是 1.2246467991473532e-16。注意:它是 0.00000000000000012246467991473532,而不是您在问题中写的 1.224。

    类似的舍入误差会导致 -2.4492935982947064e-16,因为 i 等于 8。参数不完全是 2 PI,舍入误差会导致值与 0.0 略有不同。 同样 -2.4492935982947064e-16 是 -0.00000000000000024492935982947064 而不是您在问题中写的 -2.449。

    【讨论】:

    • 非常有帮助!非常感谢!
    • 因为它是一个有限精度的浮点数,math.pi != π。要获得更合适的结果,请检查 Python 或合适的 Python 库是否提供 sinpi 函数。有了这些,您就可以写sinpi(0.25*i) 以获得更好的准确性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    相关资源
    最近更新 更多