只是为了清楚起见,你的程序is给你正确答案。也就是说,它完全按照您在代码中告诉它的方式执行。
180*M_PI
正确舍入(根据 IEEE-754),并给出值:
565.4866776461627750904881395399570465087890625
除以 180 也可以正确舍入,并给出结果:
3.141592653589793115997963468544185161590576171875
这不是exactlyπ 的数学值。事实上,它是:
π - 0.0000000000000001224646799147...
泰勒级数的一阶项sin(x)
π 周围是 (π-x),所以sin(π - x)
是,对于小x
,几乎完全一样-x
。事实上,你得到的结果是正确舍入的结果。图书馆不可能提供更准确的答案。
As 本·沃伊特建议,如果这对您来说确实是一个问题,您可以通过在从角度转换为弧度之前将参数减少到范围 [-90, 90) 来解决它。更好的建议是njuffa是要使用一个sinpi
函数将为您完成这项工作。 iOS没有这个功能,但是有vvsinpi
,它实现了向量的 sin(π*x),并且可以做你想做的事:
double result;
int vectorLength = 1;
vvsinpi(&result, &operand, &vectorLength);
另请提交错误请求sinpi
作为扩展添加到数学库中。