ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 为什么sin(45)和cos(45)给出不同的结果?

2019-10-02 07:06:03  阅读:263  来源: 互联网

标签:pi angle c trigonometry


参见英文答案 > Is floating point math broken?                                    30个
这是我没想到的.我知道这些数字不是100%准确,但我没想到互补的角度给出了不同的罪和余的结果:

以下函数返回0.70710678118654746000000 …

sin(45 * PI / 180.0);

而这个follwing函数返回0.70710678118654757000000 …

cos(45 * PI / 180.0);

所以是:

0.707106781186547**46**000000... vs
0.707106781186547**57**000000...

而且不仅那些……罪(1 * PI / 180.0)也会返回与cos(89 * PI / 180.0)略有不同的数字,尽管它们应该是相同的.

此外,它不仅是一个罪恶与cos的问题,它也是一个罪与罪的问题:sin(1 * PI / 180.0)返回的值不同于sin(179 * PI / 180.0),它们应该是相同的.

我尝试使用弧度而不是度数,并且存在完全相同的差异,我尝试使用小的PI值,一个巨大的PI值(大约100个小数点以上)并且它们仍然不同,我尝试使用cmath代替math.h,我尝试使用M_PI而不是我自己定义的PI.

差值总是相同的,大约是十六进制小数.不要误会我的意思,我知道我永远不会得到这些数字的100%精确值,但至少我期望获得相同的“不精确”的sin值和互补角度的cos值.这一切到底是怎么回事?

我需要它们是相同的,因为我正在处理的程序(我被要求做的重力模拟器)使用具有双重(我也尝试浮动)变量的对象,这些变量基本上是角度(度或弧度,我试过都).这些是物体用来移动的方向,我也需要角度来计算物体之间的相互作用.

角度在程序的每次迭代中都会发生变化,并且在每次迭代中,角度都会根据前一次迭代角度的计算而变化,因此如果在任何点上存在任何最小错误的角度值,则该误差会在每次迭代中越来越大.迭代.

该程序运行数千甚至数百万次迭代,因此值的误差非常大!说清楚,行星最终摆脱了平衡,一切都变成了灾难,我真的很生气:(

附:我在Windows 7,32位.

解决方法:

I know I will never get a 100% precise value of these numbers, but AT
LEAST I was expecting to get the same “unprecise” value of sin and cos
of complementary angles.

为什么?计算方式不同,因此会出现(并累积)不同的浮点错误.你看到的不是错误; FP算法不能通过数学定律预测.

顺便说一句,提供例如. PI的30或100位数字不会有任何不同
如果您的类型首先不能容纳30位数字.

标签:pi,angle,c,trigonometry
来源: https://codeday.me/bug/20191002/1841781.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有