user-0 提问: sin函数的精度问题

回复:
user: user-1
content: 引用 21 楼 clever101 的回复:[quote=引用 6 楼 zhao4zhong1 的回复:] 浮点数格式 http://bbs.csdn.net/topics/390676437        大侠，这个跟浮点数格式无关吧。[/quote] 我也不知道。

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:浮点数格式 http://bbs.csdn.net/topics/390676437        大侠，这个跟浮点数格式无关吧。

user: user-2
content: 引用 16 楼 cfjtaishan 的回复:你们不要以为自己知道了，就可以随意指责别人怎么那么笨。在这里不是指责的地方，而是把别人没有认识到的问题指出来，你们如果都很牛，在这混啥，出去吹呗～  问题是这个sin函数的参数代表的意义，你们指出来就行了嘛。没有找出问题所在，画图有啥意义，程序员都没学过三角函数，没学过几何数学？还无语，充分暴露程序员的智商，搞的你不是程序员似得，你的智商有多高似得。  显摆有意义吗？站在别人的身上说别人的不是，你不想想你自己也是程序员吗？你跑出这个圈了吗？  哈哈！我把侄子训了一顿，竟敢鄙视我们程序猿。事实上很多数学的东西我也忘记了，还要靠他教我。消消气

user: user-2
content: 引用 15 楼 cfjtaishan 的回复:[quote=引用 14 楼 goldenhawking 的回复:] 唉！无语了。这个帖子，充分暴露了程序猿的智商。  我的小侄子都在笑话，他的计算器（考试不让带，被我K了）上，RAD，DEG，GRAD都知道啥意思, 计算sin(30)=0.5必须在DEG下。 中学sin要用deg算，而后到后面，学到了弧度用rad算。除了教学课本为了笔算、和差化积方便，用的角度，基本上sin本身是以弧度为单位的。 是啊，我们的之上堪忧，你的之上至上，这样可以吧[/quote] 说到智商，真的是一个硬伤。长江后浪推前浪。 现在的中学里面，在教python，和化学课也结合起来了，侄子的班上，信息学要求用python画图，把化学酸碱滴定的曲线画出来。感觉现在的小孩计算机都学得好早，好厉害的，真的为程序猿的前途担忧。以后编程渐渐的都成为一种必会技能了，估计程序猿就像打字员一样，要Over了。

user: user-3
content: 越在接近-π 的地方越趋于0，导数越趋于-1，所以sinx可近似成x与π的差，所以db2差的数量级是很小的，但其他的就差的很多了

user: user-4
content: 你们不要以为自己知道了，就可以随意指责别人怎么那么笨。在这里不是指责的地方，而是把别人没有认识到的问题指出来，你们如果都很牛，在这混啥，出去吹呗～  问题是这个sin函数的参数代表的意义，你们指出来就行了嘛。没有找出问题所在，画图有啥意义，程序员都没学过三角函数，没学过几何数学？还无语，充分暴露程序员的智商，搞的你不是程序员似得，你的智商有多高似得。  显摆有意义吗？站在别人的身上说别人的不是，你不想想你自己也是程序员吗？你跑出这个圈了吗？

user: user-4
content: 引用 14 楼 goldenhawking 的回复:唉！无语了。这个帖子，充分暴露了程序猿的智商。  我的小侄子都在笑话，他的计算器（考试不让带，被我K了）上，RAD，DEG，GRAD都知道啥意思, 计算sin(30)=0.5必须在DEG下。 中学sin要用deg算，而后到后面，学到了弧度用rad算。除了教学课本为了笔算、和差化积方便，用的角度，基本上sin本身是以弧度为单位的。 是啊，我们的之上堪忧，你的之上至上，这样可以吧

user: user-5
content: 恰恰相反，我感觉95后的计算机水平普遍下降了，因为他们更多是玩手机。

user: user-4
content: 问题应该是出在sin函数的参数表示的意义，即sin函数参数需要是弧度，弧度中π对应的是180度。   DESCRIPTION        The sin() function returns the sine of x, where x is given in radians.

user: user-4
content: 引用 8 楼 user-6 的回复:[quote=引用 5 楼 自信男孩的回复:]试了一下计算器算出来的相差不大。  [quote=引用 3 楼 user-6 的回复:] 至于差那么远，你可以自己拿计算器按一下 引用 4 楼 goldenhawking 的回复:不奇怪。sin在pi附近导数为1, 你不要比 db1 和 db2 差多少，比较  db1 和 pi, db2 和pi差多少 fabs(db1 + pi) = 1.668e-3 fabs(db2 - pi) = 1e-15 你看看，与pi的差距倍数就是1e-12, 导数为1,所以函数值也差不多差了1e-12 很正常的值。[/quote] 我猜你计算器输入的肯定不是弧度！  sin(-pi)结果是0，所以得到的结果很小小是很在正常的[/quote] 这个跟弧度没关系吧，直接用科学计算器计算的。建议自己用科学计算器算一下。

user: user-2
content: 唉！无语了。这个帖子，充分暴露了程序猿的智商。  我的小侄子都在笑话，他的计算器（考试不让带，被我K了）上，RAD，DEG，GRAD都知道啥意思, 计算sin(30)=0.5必须在DEG下。 中学sin要用deg算，而后到后面，学到了弧度用rad算。除了教学课本为了笔算、和差化积方便，用的角度，基本上sin本身是以弧度为单位的。

user: user-6
content: 引用 9 楼 自信男孩的回复:[quote=引用 8 楼 user-6 的回复:] [quote=引用 5 楼 自信男孩的回复:]试了一下计算器算出来的相差不大。  [quote=引用 3 楼 user-6 的回复:] 至于差那么远，你可以自己拿计算器按一下 引用 4 楼 goldenhawking 的回复:不奇怪。sin在pi附近导数为1, 你不要比 db1 和 db2 差多少，比较  db1 和 pi, db2 和pi差多少 fabs(db1 + pi) = 1.668e-3 fabs(db2 - pi) = 1e-15 你看看，与pi的差距倍数就是1e-12, 导数为1,所以函数值也差不多差了1e-12 很正常的值。[/quote] 我猜你计算器输入的肯定不是弧度！  sin(-pi)结果是0，所以得到的结果很小小是很在正常的[/quote] 这个跟弧度没关系吧，直接用科学计算器计算的。建议自己用科学计算器算一下。[/quote] 别争了，不服上图说话，sin的参数本来就是弧度为单位的，怎么会说没关系呢，你是不是在角度为单位下按的计算器

user: user-2
content: 用matlab画一下就知道了  x = linspace(-0.01-pi, +0.01-pi,65536); x_ax = zeros(size(x)); p = [-3.1399244494829666,-3.1415926535897927]; q = sin(p); hold on; plot(x,x_ax,'r'); plot(x,sin(x)); plot(p,q,'ko'); hold off;  其中一个超级接近0.

user: user-2
content: 哈哈！突然想到了袁萌老师的“无穷小”，看来，大家的数学过关的不多啊！

user: user-6
content: 引用 5 楼 自信男孩的回复:试了一下计算器算出来的相差不大。  [quote=引用 3 楼 user-6 的回复:] 至于差那么远，你可以自己拿计算器按一下 引用 4 楼 goldenhawking 的回复:不奇怪。sin在pi附近导数为1, 你不要比 db1 和 db2 差多少，比较  db1 和 pi, db2 和pi差多少 fabs(db1 + pi) = 1.668e-3 fabs(db2 - pi) = 1e-15 你看看，与pi的差距倍数就是1e-12, 导数为1,所以函数值也差不多差了1e-12 很正常的值。[/quote] 我猜你计算器输入的肯定不是弧度！  sin(-pi)结果是0，所以得到的结果很小小是很在正常的

user: user-1
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-4
content: 试了一下计算器算出来的相差不大。  引用 3 楼 user-6 的回复:至于差那么远，你可以自己拿计算器按一下 引用 4 楼 goldenhawking 的回复:不奇怪。sin在pi附近导数为1, 你不要比 db1 和 db2 差多少，比较  db1 和 pi, db2 和pi差多少 fabs(db1 + pi) = 1.668e-3 fabs(db2 - pi) = 1e-15 你看看，与pi的差距倍数就是1e-12, 导数为1,所以函数值也差不多差了1e-12 很正常的值。

user: user-2
content: 不奇怪。sin在pi附近导数为1, 你不要比 db1 和 db2 差多少，比较  db1 和 pi, db2 和pi差多少 fabs(db1 + pi) = 1.668e-3 fabs(db2 - pi) = 1e-15 你看看，与pi的差距倍数就是1e-12, 导数为1,所以函数值也差不多差了1e-12 很正常的值。

user: user-6
content: 至于差那么远，你可以自己拿计算器按一下

user: user-6
content: std::cout << std::fixed << std::setprecision(15) << "db1:" << db1 << std::endl;