为什么没有std::numbers::sqrtpi_v?

问题描述 投票:0回答:1

我有一个

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>)
准确?

c++ numbers c++20
1个回答
0
投票

但是也没有

std::numbers::sqrtpi_v<RealType>
,....这是为什么?强调已添加】

来自P0631R8

4.0。设计目标。

  1. 用户应该能够轻松地将所有 POSIX 常量替换为标准 C++ 常量。
  2. 这些常量应该适用于所有浮点类型,无需类型转换,并且具有各自类型的最大精度。
  3. 应该可以轻松创建一组常见角度的基本三角函数值,并且具有最大精度。
  4. 这些常量应该为对数值分析感兴趣的 C++ 用户提供切实的好处。
  5. 应该可以为用户定义的类型实例化它们。

报纸接着说,

为了实现设计目标1)、3)和4),我们需要提供以下三组常量:[C++20中添加的

<numbers>
的内容]

© www.soinside.com 2019 - 2025. All rights reserved.