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>
相关推荐
晴天的雨.9925 分钟前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
IvanCodes5 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
aramae7 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
qq_2518364579 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
郑州光合科技余经理10 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
知识分享小能手10 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
qq_1998868711 小时前
第8板块·第2节:统一内存的高级特性与性能调优
c++·人工智能·gpu算力·cuda
+VX:Fegn089511 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
阿里嘎多学长11 小时前
2026-09-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
2401_8390805412 小时前
C++常见八股
数据结构·c++·算法