function - python的sin函数中的错误
问题描述
我有一个关于使用正弦函数的问题。当我输入数字 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] print(y)
plt.plot(x, y) plt.show()
解决方案
一切正常。
当 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。
推荐阅读
- ios - 有没有办法在构建完成后将捆绑资源复制到应用程序文件夹?
- android - 在 android 活动中预览文件(PDF、图像、docx)时出现问题
- php - PHP/MySQL 自定义唯一引用
- android - android firebase 迭代数据存储
- excel - 百分位函数来计算点火中的累积
- c# - 在任务中包装 EAP
- cloud-foundry - s3cmd 不再正常工作
- vb.net - VB 表单不保存格式
- javascript - 通过不可见的 reCaptcha 验证并保持 html5 表单验证的两种表单
- java - serializationUtils.clone(obj) 和 obj.clone() 方法有什么区别