Rust 1.98:让浮点运算快如整数

Faster floating point math with Rust's new API

Rust 1.98:让浮点运算快如整数

浮点运算通常比整数慢,因为编译器为了保持精度不敢随意优化。Rust 1.98 带来了新的代数运算符,允许开发者在特定场景下告诉编译器:这里可以大胆重排运算顺序。通过对比整数与浮点求和的 CPU 指令数,我发现启用代数运算后,Rust 的 Pairwise Summation 实现甚至超越了 NumPy。这不仅让代码运行速度翻倍,还保留了算法应有的精度。对于需要高性能数值计算的开发者来说,这是平衡速度与准确性的关键突破。

因为求和顺序会影响结果,编译器理所当然地假设你特意要求了这种顺序,因此绝不会重排这些操作。
  1. GeertB

    > 浮点运算通常比整数运算慢,是因为编译器在优化你的代码时过于保守。

    说它“过于保守”并不完全准确。更准确的说法是,浮点运算的语义与整数运算不同,某种针对整数表达式保留语义的优化,应用到浮点表达式上时可能就无法做到这一点。因此,某个优化可以应用于整数表达式,但如果将其应用于浮点表达式,可能会导致程序含义发生变化。

    C/C++ 编译器提供了一个解决方案,即 `--ffast-math` 标志,它本质上允许编译器放宽对浮点优化传递的约束。

    关于这在 GCC 中如何工作的示例,请看这里:https://gcc.gnu.org/wiki/FloatingPointMath

  2. 14113

    只有当溢出被定义为像无符号算术那样回绕时,有符号整数加法才具有结合律。这种情况在这里是满足的,因为只有调试构建会在溢出时触发 panic。然而,这是一个文章完全忽略的灰色地带。

  3. rob74

    理想情况下,CPython 应该拥有一个 JIT,能够根据当前硬件像其他生态系统那样实现这一点,但我们目前还做不到。

同日更多故事

2026-08-11