【问题标题】:Calculate sin without cmath [closed]在没有 cmath 的情况下计算 sin [关闭]
【发布时间】:2013-10-30 16:34:18
【问题描述】:

有人要求我在不使用任何数学库的情况下使用 C++ 计算 sin(x) 的值。 我将如何通过他们获取一个条目(比如 2 弧度)并将它们返回 2 处的 sin 函数的值?

谢谢。

【问题讨论】:

  • 这个问题似乎跑题了,因为它是关于数学的
  • 为什么不能使用数学库?这就是它们的用途,它们可能比你想出的任何东西都要好得多。 (一方面,它们可能会被硬件加速。)

标签: c++ math


【解决方案1】:

一种选择是使用正弦的泰勒级数来获得近似值:

sin(x) = x - x3 / 3! + x5 / 5! - x7 / 7! + x9 / 9! - ...

如果您计算该多项式的前五或六项并且 x 很小,您可能会得到一个 非常 很好的 sin x 近似值。您可以通过尝试将其保持在 (-π, +π) 范围内来保持 x 较小。

有很多更好的方法可用。一个标准的方法是使用CORDIC,这是一组经过优化以快速准确的方法。

希望这会有所帮助!

【讨论】:

  • 太好了,谢谢。我完全忘记了使用泰勒级数。
  • 泰勒级数是逼近函数的一种糟糕方法,因为它们收敛缓慢并且远离中心点的误差越来越大。 Minimax polynomials are better. 一个简单的核心 sin 实现是 here
【解决方案2】:

您可以使用Taylor Series 研究数值近似。不太具体,您可以阅读广义的Taylor/MacLaurin Series

简而言之:

sin(x) = x − x^3/3! + x^5/5! − x^7/7! + x^9/9!

通常您可以将其扩展为几个术语,并且在合理的误差范围内。误差呈指数下降,因此即使是 4、5 或 6 个项,您也将获得准确的结果。术语越多,越准确。

这是计算机评估三角函数、积分和许多其他复杂公式的一种方式。我想问你的人的目的是让人们对计算机处理这些功能的方式有所了解。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多