提问人:rwallace 提问时间:12/2/2022 更新时间:12/3/2022 访问量:121
计算三角函数需要多少次算术运算?
How many arithmetic operations should it take to calculate trig functions?
问:
我正在尝试评估计算三角函数的预期性能,作为所需精度的函数。显然,挂钟时间取决于基础算术的速度,因此只需计算运算次数即可将其分解:
使用最先进的算法,应该进行多少次算术运算(加、减、乘、除)来计算,作为输出中所需的精度位数(或十进制数字)的函数?sin(x)
答:
...评估计算三角函数的预期性能作为所需精度的函数。
将泰勒级数正弦值中第一个省略的项视为误差顺序。x = π/4
细节:通常有以下几个阶段:sin(x)
处理特殊情况:NaN、无穷大。
参数简化到主要范围,表示 [-π/4...+π/4]。真正的好减少是困难的,因为π是非理性的,因此涉及达到 50% 时间的代码。模拟所需的扩展精度需要花费大量时间。(研究 K.C. Ng 的“ARGUMENT REDUCTION FOR HUGE ARGUMENTS: Good to the Last Bit”)
低质量还原涉及的要少得多:, truncate, , .sin()
/
-
*
在有限范围内进行计算。这是许多人只考虑的。如果使用泰勒级数完成并且需要 53 位,那么大约需要 10-11 项:泰勒级数正弦。然而,质量代码通常使用一对精心设计的多项式,每个多项式大约有 4-5 项,以形成商 p(x)/q(x)。
当然,这些步骤中的任何一个都提供专用硬件支持,大大提高了性能。
注意:代码 for 通常与代码配对,因为大量使用 trig 恒等式可以简化计算。
sin()
cos()
我希望软件解决方案的成本是普通的 25 倍。这是一个粗略的估计。sin()
*
为了在 ULP 中实现非常低的错误率,代码通常会使用更多。 只需几个条款就可以过得去。因此,在评估时间性能时,需要权衡正确性。你想要多好?sine_crap()
sin()
评估计算三角函数的预期性能作为所需精度的函数
使用泰勒级数作为运算次数、最坏情况 (45°) 和序列最后一项顺序计算误差的预测因子:x = π/4
对于 32 位,需要订购 6 个操作。
对于 64 位,需要订购 9 个操作。float
float
double
float
因此,如果时间按 FP 宽度的平方缩放,预计需要 6 倍的时间。double
9/6*2*2
评论