Help, My Sin Is Slow and My FPU is Inaccurate - Bert Hubert's writings
a day ago
- 作者在计算π的精确倍数时遇到了sin()的奇怪减速,这触发了glibc的慢路径。
- 由于范围缩减的困难,FPU硬件指令对于大输入的三角函数不准确。
- Payne-Hanek-Corbett算法(1983年)在软件中解决了大角度的精确范围缩减问题。
- 减速发生是因为代码用整数步长计算sin(2π * Hz * t),产生了π的精确倍数。
- 截至2021年,glibc的libm已经被优化(Wilco Dijkstra的补丁),消除了这类输入的巨大减速。