gpt4 book ai didi

c++ - 与数学库 sin 相比,sin 函数不准确

转载 作者:行者123 更新时间:2023-11-28 06:36:31 28 4
gpt4 key购买 nike

我一直在尝试实现一个快速但更重要的是准确的自定义 sin 函数(我不能在我的项目中使用 math.h sin)。我不是这类数学方面的专家,所以请和我一起工作 XD。在网上稍作搜索后,我发现了以下代码,该函数在某些情况下会返回不准确的结果。

float SinF(float X)
{
float Sine;

if (X < -3.14159265F) X += 6.28318531F;
else if (X > 3.14159265F) X -= 6.28318531F;

if (X < 0)
{
Sine = 1.27323954F * X + .405284735F * X * X;
if (Sine < 0) Sine = .225F * (Sine *-Sine - Sine) + Sine;
else Sine = .225F * (Sine * Sine - Sine) + Sine;
}
else
{
Sine = 1.27323954F * X - 0.405284735F * X * X;
if (Sine < 0) Sine = .225F * (Sine *-Sine - Sine) + Sine;
else Sine = .225F * (Sine * Sine - Sine) + Sine;
}

return Sine;
}

例子:

Bad result example 1:
Value Passed: 1.57079637
Returned Value: 0.999999881
Correct Value: 1.00000000

Bad result example 2:
Value Passed: 1.76704633
Returned Value: 0.980933487
Correct Value: 0.980804682

Bad result example 3:
Value Passed: 1.96329641
Returned Value: 0.924392164
Correct Value: 0.923955679

如有任何帮助,我们将不胜感激。

最佳答案

this SO question 中有一堆sin 和 friend 的潜在实现。 ,但通常归结为一些常用方法:

  • 内置处理器代码 (fsin)
  • Taylor series
  • CORDIC
  • 具有可选线性(或更好)插值的查找表(主要是为了速度,不太准确)

还有(很多)其他方法,但这些是我见过的更常见的方法。

还要注意 float 固有的精度限制(如 user657267 linked 所示)。例如,1.57079637 不完全是 pi/2 所以它的 sin() 可能不完全是 1。事实上,你所有的“正确”列出的值并不完全准确。您必须决定对您的应用来说有多准确才足够好。

关于c++ - 与数学库 sin 相比,sin 函数不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26694252/

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