伪代码中的三角函数
Trigonometric Functions in Pseudo Code
我正在用伪代码搜索三角函数。
我不擅长数学,所以我不能用维基百科中的公式做很多事情。
我主要是在搜索正弦、余弦、正切和它们的反函数(sin⁻¹、cos⁻¹、tan⁻¹)。
还有其他三角函数。但对我来说,以上是最重要的。
如果可能的话,如果伪代码中只有变量for
、if
和运算符(+
、-
、*
, /
, %
, sqrt()
),因为我没有高等数学函数的库。
三角函数是Transcendental。
你找不到精确它们的多项式代数表达式。
不过您可以近似它们。
通常的做法是利用周期性和对称性将一个角α减成等价角α′使得sin(α) = sin(α′) 但 α′ ≪ α.
简单地说,你将任何角度缩小到第一象限或类似的角度,这比看起来容易。
一旦你有一个小角度,你可以使用 Taylor Series Expansion 来计算函数直到一个固定的误差幅度。
Here 是教程页面。
另一种方法是使用 lookup table。
当您可以跟踪流程所需的精度并且速度非常快时,这尤其有用。
然而,它需要更多的内存,并且可能会产生阶跃函数。
Here 介绍页。
另一种方法是使用CORDIC Algorithm,这特别适用于缺乏乘法支持的硬件(如某些 MIPS 和 ARM 芯片)。
来自维基百科:
CORDIC is generally faster than other approaches when a hardware multiplier is not available (e.g., a microcontroller) [...]
On the other hand, when a hardware multiplier is available (e.g., in a DSP microprocessor), table-lookup methods and power series are generally faster than CORDIC.
我正在用伪代码搜索三角函数。 我不擅长数学,所以我不能用维基百科中的公式做很多事情。 我主要是在搜索正弦、余弦、正切和它们的反函数(sin⁻¹、cos⁻¹、tan⁻¹)。 还有其他三角函数。但对我来说,以上是最重要的。
如果可能的话,如果伪代码中只有变量for
、if
和运算符(+
、-
、*
, /
, %
, sqrt()
),因为我没有高等数学函数的库。
三角函数是Transcendental。
你找不到精确它们的多项式代数表达式。
不过您可以近似它们。
通常的做法是利用周期性和对称性将一个角α减成等价角α′使得sin(α) = sin(α′) 但 α′ ≪ α.
简单地说,你将任何角度缩小到第一象限或类似的角度,这比看起来容易。
一旦你有一个小角度,你可以使用 Taylor Series Expansion 来计算函数直到一个固定的误差幅度。
Here 是教程页面。
另一种方法是使用 lookup table。
当您可以跟踪流程所需的精度并且速度非常快时,这尤其有用。
然而,它需要更多的内存,并且可能会产生阶跃函数。
Here 介绍页。
另一种方法是使用CORDIC Algorithm,这特别适用于缺乏乘法支持的硬件(如某些 MIPS 和 ARM 芯片)。 来自维基百科:
CORDIC is generally faster than other approaches when a hardware multiplier is not available (e.g., a microcontroller) [...]
On the other hand, when a hardware multiplier is available (e.g., in a DSP microprocessor), table-lookup methods and power series are generally faster than CORDIC.