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>
相关推荐
我在人间贩卖青春1 小时前
C++之多重继承
c++·多重继承
m0_736919101 小时前
C++代码风格检查工具
开发语言·c++·算法
2501_944934731 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
黎雁·泠崖2 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
吐泡泡_3 小时前
C++20(三路比较运算符)
c++20
2301_763472463 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
阿猿收手吧!3 小时前
【C++】std::promise原理与实战解析
c++
TechWJ3 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
lly2024064 小时前
C++ 文件和流
开发语言
m0_706653234 小时前
分布式系统安全通信
开发语言·c++·算法