C++ 标准库 numbers 功能 用法运用 详解

news/2025/3/10 14:06:40/文章来源:https://www.cnblogs.com/baisemoshui/p/18762564

C++标准库中的<numbers>头文件是C++20中新增的一个模块,它主要用于提供一组常用的数学常量。以下是对<numbers>头文件的功能、用法及运用的详细解析:

一、功能

<numbers>头文件提供了一系列表示数学中特殊值的常量,这些常量涵盖了圆周率、自然对数的底数、黄金比例等常见数学常数。通过使用这些常量,C++程序可以提高代码的可读性、精度和效率,同时避免了重复定义和手动输入常数值的问题。

二、用法

<numbers>头文件中的常量被定义在std::numbers命名空间中。这些常量包括但不限于以下几种:

  1. 圆周率π

    • std::numbers::pi:表示圆周率π的double类型常量。
    • std::numbers::pi_v<T>:表示圆周率π的类型为T的变量模板,T可以为float、double、long double等浮点类型。
  2. 自然常数e

    • std::numbers::e:表示自然常数e的double类型常量。
    • std::numbers::e_v<T>:表示自然常数e的类型为T的变量模板。
  3. 其他数学常数

    • std::numbers::log2estd::numbers::log2e_v<T>:表示以2为底自然常数e的对数。
    • std::numbers::ln2std::numbers::ln2_v<T>:表示以自然常数e为底的2的对数。
    • std::numbers::log10estd::numbers::log10e_v<T>:表示以10为底自然常数e的对数。
    • std::numbers::ln10std::numbers::ln10_v<T>:表示以自然常数e为底的10的对数。
    • std::numbers::sqrt2std::numbers::sqrt2_v<T>:表示2的平方根。
    • std::numbers::sqrt3std::numbers::sqrt3_v<T>:表示3的平方根。
    • std::numbers::inv_sqrt3std::numbers::inv_sqrt3_v<T>:表示3的平方根的倒数。
    • std::numbers::inv_pistd::numbers::inv_pi_v<T>:表示圆周率π的倒数。
    • std::numbers::egammastd::numbers::egamma_v<T>:表示欧拉-马歇罗尼常数γ。
    • std::numbers::phistd::numbers::phi_v<T>:表示黄金比例Φ。

三、运用示例

以下是一个简单的C++程序示例,展示了如何使用<numbers>头文件中的常量:

#include <iostream>
#include <numbers>int main() {std::cout << "pi: " << std::numbers::pi << std::endl;std::cout << "e: " << std::numbers::e << std::endl;std::cout << "log2e: " << std::numbers::log2e << std::endl;std::cout << "ln2: " << std::numbers::ln2 << std::endl;std::cout << "sqrt2: " << std::numbers::sqrt2 << std::endl;std::cout << "inv_pi: " << std::numbers::inv_pi << std::endl;std::cout << "phi: " << std::numbers::phi << std::endl;// 使用变量模板std::cout << "pi_v<float>: " << std::numbers::pi_v<float> << std::endl;std::cout << "e_v<long double>: " << std::numbers::e_v<long double> << std::endl;return 0;
}

这个程序输出了<numbers>头文件中定义的一些常量的值,并展示了如何使用变量模板来获取不同类型的常量值。

综上所述,<numbers>头文件为C++程序提供了一组方便、准确且易于使用的数学常量,有助于提高代码的可读性和效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/896807.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

材料焊接工艺大全-芯晨微纳(河南) -专注于激光代加工

一、材料焊接中的“焊接力” 材料焊接,准确说应该为“材料互联”,是通过物理力、化学力、机械作用力等方式将原本相互隔离的材料连为一体的过程。 物理力中的四种基本力是万有引力、电磁力、强相互作用力和弱相互作用力。具体的,按性质(根据它们的物理性质来命名和分类)分…

Zabbix 7.2 + Grafana 中文全自动安装ISO镜像

简介 ​基于Zabbix 官方的Alma Linux 8 作为基础镜像。镜像源都改为国内大学镜像站,自动联网安装Zabbix+Grafana。安装中文字体、Zabbix和Grafana也配置默认中文。Zabbix 也指定中文字体,绘图无乱码。配置时区为东八区,Zabbix配置Web时区也为东八区。Grafana自动安装zabbix源…

第十八章 项目绩效域(2025年详细解析版)

目录导学太极八卦与项目管理体系项目管理整体框架图绩效域原则和绩效域的关系18.1 干系人绩效域干系人绩效域概述定义预期目标绩效要点 :促进干系人参与目的作用促进干系人参与要做的六项活动与其他绩效域的相互作用(了解)关联为什么要促进干系人参与?为什么干系人重要?执…

PCA9306DCTR特征—400kHz I2C/SMBus电压电平转换器/S9S08DZ60F2VLCR/CC2650F128RSMR/MAX4715EXK SPST 开关

PCA9306DCTR是一款2 位双向 400kHz I2C/SMBus 电压电平转换器,可以在 1.2V 到 5V 之间实现双向电压转换而无须使用方向引脚。PCA9306DCTR是一款2 位双向 400kHz I2C/SMBus 电压电平转换器,可以在 1.2V 到 5V 之间实现双向电压转换而无须使用方向引脚。PCA9306DCTR具有低导通状…

快速理解Kubernetes 系统架构

Kubernetes 架构解析1. 整体架构:管理层 + 执行层 管理层(Master 节点)——"老板团队"API 服务器(kube-apiserver) ▶️ 公司的"前台",所有指令必须通过这里传达(如部署应用、查看状态) 调度器(kube-scheduler) ▶️ 像"项目经理",决…

001TypeScript开发实战

1、点击文件,点击打开文件夹 2、选择文件夹,打开文件夹 3、点击终端,新建终端 4、在终端内输入npm init vue@latest 按回车 5、写入项目名称 vue3-ts-cms 6、选择:这里我们先这样选择,Router(单页面应用开发)Pinia(状态管理)这次我们搭建一下7、 这里我们选择NO 可以看见…

​信创概念深度科普:从3大政策背景到5类典型应用场景全解析

信创,即信息技术应用创新产业,近年来在我国的科技发展领域占据着愈发重要的地位。它不仅仅是一个简单的产业概念,更是我国实现科技自立自强、保障国家信息安全的关键支撑。随着数字化时代的加速推进,信创产业迎来了前所未有的发展机遇,其涵盖的范围广泛,涉及到众多的政策…

数字逻辑 可编程阵列逻辑(PAL)

数字逻辑 可编程阵列逻辑(PAL) 参考书籍:数字逻辑基础与Verilog设计 原书第3版 P402 这里先给个可编程逻辑阵列(PLA)的例子。PLA的常用示意图中画X的就是选中的。 所以图 B.27 的计算过程为: \[\begin{align} P_1=& \ x_1x_2\\[1mm] P_2=& \ x_1 \overline x_{3…

基本项目目录解析

1、这里是说明vscode的相关配置的 recommendations 推荐的意思 最好安装的一些插件 这个必须安装 也可以看到这里有安装插件的弹窗 2、public这里是放入的我们的一些资源的 3、这里是放站点图标的,网站的的图标 4、src 就是放我们的源代码的5、node_modules 文件夹主要用来存…

ASE150N10-ASEMI中低压MOS管ASE150N10

ASE150N10-ASEMI中低压MOS管ASE150N10编辑:ll 强劲功率处理,驱动无限潜能 ASE150N10 最为亮眼之处在于它出色的电流承载能力。高达 150A 的连续漏极电流,如同一条奔腾不息的电子洪流,能够轻松应对各类大功率需求场景。想象一下,在电动汽车的动力控制系统里,它稳稳地调控着…

WMS系统能解决哪些仓储管理问题?

WMS系统能解决哪些仓储管理问题? ——库存锁库、库存预警、扫码出入库,这些都能搞定吗? 当然可以! 不仅如此,WMS系统还涵盖了订单管理、货物追踪、数据分析等功能。 今天咱们就来聊聊,仓储管理系统是如何实现库存锁定、提供库存预警、扫码出入库等操作的,帮你彻底解决仓…

task5.c

include<stdio.h> int main() { int s, year; s = 1000000000; year = s / 3600 / 24 / 365; if (year % 2 > 0) year += 1; printf("10亿秒约等于%d年\n", year); return 0; }