C++20 STL <numbers> 数学常量库

C++20 STL numbers 数学常量库

  • [1. numbers 概述](#1. numbers 概述)
  • [2. 常见分类与常量速览](#2. 常见分类与常量速览)
  • [3. C++示例](#3. C++示例)

1. numbers 概述

<numbers> 是 C++20 新增的标准头文件,定义了一组常用数学常量。命名空间是std::numbers。在实际工程应用中,应该用标准替代经验,用规范替代习惯。用 <numbers> 替代手写常量,统一数学表达方式,提升可读性与可靠性

核心特点:

  • constexpr 编译期常量
  • 类型安全(支持模板变量)
  • 精度由标准库保证
  • 无宏污染、无全局符号冲突

为什么 比宏更好?

对比项 宏定义 <numbers>
类型安全
命名空间
编译期 部分
精度保证 人工 标准
工程规范

❌ 传统写法:

cpp 复制代码
#define PI 3.1415926

✅ 现代写法:

cpp 复制代码
constexpr auto pi = std::numbers::pi;

<numbers><cmath> 的关系

<numbers> <cmath>
常量 函数
编译期 运行期
类型安全 普通函数

2. 常见分类与常量速览

π 相关

cpp 复制代码
std::numbers::pi         // π
std::numbers::inv_pi     // 1 / π
std::numbers::inv_sqrtpi // 1 / √π

自然常数e 相关

cpp 复制代码
std::numbers::e          // e
std::numbers::log2e      // log2(e)
std::numbers::log10e     // log10(e)

对数 相关

cpp 复制代码
std::numbers::ln2        // ln(2)
std::numbers::ln10       // ln(10)

根号 相关

cpp 复制代码
std::numbers::sqrt2      // √2
std::numbers::sqrt3      // √3
std::numbers::inv_sqrt2  // 1 / √2

3. C++示例

  1. 角度 ↔ 弧度转换

    cpp 复制代码
    constexpr double Deg2Rad(double deg) {
        return deg * std::numbers::pi / 180.0;
    }
    
    constexpr double Rad2Deg(double rad) {
        return rad * 180.0 / std::numbers::pi;
    }
  2. 几何 / 位姿 / 旋转计算

    cpp 复制代码
    double yaw = Deg2Rad(90.0);
    
    double c = std::cos(yaw);
    double s = std::sin(yaw);
  3. 中常用常量汇总(20 个)

cpp 复制代码
pi, inv_pi, inv_sqrtpi,
e, log2e, log10e,
ln2, ln10,
sqrt2, sqrt3, inv_sqrt2,
pi_v<float>, pi_v<double>,
e_v<float>, e_v<double>,
ln2_v<float>, ln10_v<double>,
sqrt2_v<float>, sqrt3_v<double>
相关推荐
IT陈图图13 分钟前
构建 Flutter × OpenHarmony 跨端带文本输入对话框示例
开发语言·javascript·flutter
叫我辉哥e15 小时前
### 技术文章大纲:C语言造轮子大赛
c语言·开发语言
guygg886 小时前
NOMA功率分配与64 QAM调制中的SIC的MATLAB仿真
开发语言·matlab
flushmeteor6 小时前
JDK源码-基础类-String
java·开发语言
u0109272717 小时前
C++中的策略模式变体
开发语言·c++·算法
雨季6668 小时前
构建 OpenHarmony 简易文字行数统计器:用字符串分割实现纯文本结构感知
开发语言·前端·javascript·flutter·ui·dart
雨季6668 小时前
Flutter 三端应用实战:OpenHarmony 简易倒序文本查看器开发指南
开发语言·javascript·flutter·ui
进击的小头8 小时前
行为型模式:策略模式的C语言实战指南
c语言·开发语言·策略模式
Aevget8 小时前
MFC扩展库BCGControlBar Pro v37.2新版亮点:控件功能进一步升级
c++·mfc·界面控件
天马37989 小时前
Canvas 倾斜矩形绘制波浪效果
开发语言·前端·javascript