为什么在 C++ 标准库中没有定义 inv_sqrt2?

Joh*_*ane 6 c++ constants c++-standard-library c++20 inline-variable

C++20 引入了标准库头文件<numbers>,在命名空间中定义std::numbers了数学常量,例如sqrt2sqrt3。它提供像inv_sqrt3,但不是inv_sqrt2。为什么inv_sqrt2不见了?

Joh*_*ane 8

为什么inv_sqrt2不见了?

该库尽可能精确地定义了一组最小的常用常量。在不引入舍入误差的情况下表达 (?3) -1可能很棘手,因此inv_sqrt3。但是, (?2) -1可以很容易地表示为:sqrt2 / 2,因此inv_sqrt2未定义。

  • @cigien `sqrt2/2` 不会损失精度,因为除以 2 在 IEEE 算术中是精确的。除以 3 就没有那么多了。 (10认同)
  • @MarkRansom的要点是,给定具有最大可能精度的“sqrt2”,您可以以最大可能精度导出“1/sqrt2”,因为它只是将指数减1。 (2认同)