我有一个
std::normal_distribution<RealType> normal_distribution
并且想在 constexpr
中使用它的归一化常数。不幸的是,我不能使用normal_distribution.stddev() * std::sqrt(2 * std::numbers::pi_v<RealType>)
,因为std::sqrt
是不是constexpr
。但也没有std::numbers::sqrtpi_v<RealType>
,只有std::numbers::inv_sqrtpi_v<RealType>
。所以我需要使用normal_distribution.stddev() * std::numbers::sqrt2_v<RealType> / std::numbers::inv_sqrtpi_v<RealType>
。这是为什么?我在这里失去了什么吗?这个constexpr
解决方案是否不如normal_distribution.stddev() * std::sqrt(2 * std::numbers::pi_v<RealType>)
准确?
但是也没有
,....这是为什么?【强调已添加】std::numbers::sqrtpi_v<RealType>
来自P0631R8
4.0。设计目标。
- 用户应该能够轻松地将所有 POSIX 常量替换为标准 C++ 常量。
- 这些常量应该适用于所有浮点类型,无需类型转换,并且具有各自类型的最大精度。
- 应该可以轻松创建一组常见角度的基本三角函数值,并且具有最大精度。
- 这些常量应该为对数值分析感兴趣的 C++ 用户提供切实的好处。
- 应该可以为用户定义的类型实例化它们。
报纸接着说,
为了实现设计目标1)、3)和4),我们需要提供以下三组常量:[C++20中添加的
的内容]<numbers>