gpt4 book ai didi

objective-c - 正弦 180 的值为 1.22465e-16

转载 作者:行者123 更新时间:2023-11-30 13:43:32 29 4
gpt4 key购买 nike

我想在ios4中实现一个正弦和余弦计算器:

if([operation isEqual:@"sin"]){
operand = (operand*M_PI/180.0);
operand=sin(operand);
}

代码为我提供了 0 到 90 之间的值的正确答案。

当我给出值 180 时,我得到 1.22465e-16 作为答案。我预计为零。

这个微小的差异从何而来?

最佳答案

需要明确的是,您的程序正在为您提供正确答案。也就是说,它完全按照您在代码中告诉它的方式执行。

180*M_PI 已正确舍入(根据 IEEE-754),并给出值:

565.4866776461627750904881395399570465087890625

将其除以 180 也可以正确舍入,并给出结果:

3.141592653589793115997963468544185161590576171875

这并不完全 π 的数学值。事实上,它是:

π - 0.0000000000000001224646799147...

围绕 π 的 sin(x) 泰勒级数的一阶项是 (π-x),因此 sin(π - x) 是,对于小x,几乎完全是-x。事实上,您得到的结果是正确舍入的结果。图书馆不可能提供更准确的答案。

正如 Ben Voigt 所建议的,如果这对您来说确实是一个问题,您可以通过在从角度转换为弧度之前将参数减小到范围 [-90, 90) 来解决它。更好的建议是 njuffa 使用 sinpi 函数来为您完成这项工作。 iOS 没有这样的函数,但它有 vvsinpi,它为向量实现了 sin(π*x),并且可以做你想做的事情:

double result;
int vectorLength = 1;
vvsinpi(&result, &operand, &vectorLength);

另请提交一个错误,请求将 sinpi 作为扩展添加到数学库中。

关于objective-c - 正弦 180 的值为 1.22465e-16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35273063/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com