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