讲师中心 微信公众号
AI工具推荐 视频效率加速

C++怎么计算圆周率π_C++高精度算法实现方法【解析】

浅芳吖_7782

浅芳吖_7782

发布时间:2026-03-15 19:45:31

|

358人浏览过

|

来源于php中文网

原创

<p>应优先使用 std::acos(-1.0) 或 std::atan(1.0) * 4.0 获取 double 精度 π,二者精度达约 17 位;C++20 起可声明为 constexpr 编译期常量;高精度需求应直接采用 boost::multiprecision 等成熟库而非手写算法。</p>

c++怎么计算圆周率π_c++高精度算法实现方法【解析】

用 std::atan 或 std::acos 直接获取 double 精度 π

绝大多数 C++ 场景根本不需要自己算 π —— 标准库已经提供了足够精确的值。直接调用 std::atan(1.0) * 4.0 或 std::acos(-1.0) 就能得到 double 类型下最接近真实 π 的值(约 17 位有效数字)。

常见错误是手写 3.14159265358979323846 字面量,这不仅易错,还可能因编译器截断或浮点字面量解析差异引入微小偏差。

  • std::acos(-1.0) 更简洁,但需确保 <cmath> 已包含,且传入值在 [-1, 1] 范围内(否则返回 NaN)
  • std::atan(1.0) * 4.0 数学意义更直观,但多一次乘法,无实质影响
  • 不要用 float 版本(如 std::atanf),精度掉到 7 位,对多数计算已不够用

需要更高精度时,别手写算法——用 boost::multiprecision

如果真要算到几百位、几千位(比如验证算法或教学演示),自己实现 Chudnovsky 或 Machin 公式极易出错:阶乘溢出、中间项精度丢失、收敛判断不稳、除法舍入累积……这些坑比代码本身还耗时间。

直接用 boost::multiprecision::cpp_dec_float_100 这类现成类型,配合已验证的数值库函数,才是合理路径。

立即学习“C++免费学习笔记(深入)”;

C++ Code Review Master
C++ Code Review Master

组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。

下载
  • 示例:用 boost::multiprecision::cpp_dec_float_50 算 50 位 π,只需调 boost::math::constants::pi<T>(),一行搞定
  • 手动实现 Leibniz 级数(4*(1 - 1/3 + 1/5 - 1/7 + ...))看似简单,但收敛极慢——算 10⁶ 项才勉强到 6 位准确小数,且 double 累加会因舍入误差反向漂移
  • Chudnovsky 公式虽快,但涉及大整数阶乘和高精度除法,C++ 原生类型完全无法支撑,必须依赖外部大数库

编译期常量 π:用 constexpr + 标准库函数(C++20 起)

C++20 允许 std::acos 和 std::atan 在 constexpr 上下文中使用,意味着你可以把 π 定义为编译期常量,避免运行时调用开销。

注意:不是所有编译器默认启用此特性,Clang 需 -std=c++20,GCC 10+ 支持,MSVC 2019 v16.10+ 支持;且必须用 constexpr 变量声明,不能只靠宏或字面量模拟。

  • 正确写法:constexpr double pi = std::acos(-1.0);
  • 错误写法:#define PI 3.14159265358979323846 —— 宏不参与类型检查,也无法用于 constexpr 场景(如数组维度)
  • 若需 float 版本,应显式写 constexpr float pi_f = static_cast<float>(std::acos(-1.0));,避免隐式截断不可控

自定义高精度实现前,先确认是否真需要“算”π

很多所谓“高精度 π 计算需求”,实际只是想用高精度 π 值做后续运算。这时候真正该做的,是选对数值类型和常量来源,而不是重写算法。

比如用 long double 时,不同平台精度差异极大(x86 是 80-bit 扩展精度,ARM64 通常是 IEEE-754 binary64),直接用 std::acos(-1.0L) 比自己“算”更可靠。

  • Linux x86_64 下 long double 可能有 19 位有效数字,但 macOS / iOS 已将其降级为普通 double,此时再用 std::acos(-1.0L) 不会提升精度
  • 如果项目已用 boost::multiprecision,就别重复造轮子;如果没引入任何大数库,又确实需要百位以上 π,那优先考虑 Python 或专用工具生成常量表,而非在 C++ 里实时计算
  • 真正需要动态计算 π 的场景极少:比如硬件受限嵌入式系统(无标准库)、特定密码学协议要求、或算法课设——这种情况下,务必用已知收敛性与误差界的公式,并做中间项截断误差估计

最常被忽略的一点:π 的“精度”永远受限于你使用的数值类型和计算路径。从源码里抄一段 Chudnovsky 实现,不解决大整数、高精度除法、舍入控制,结果很可能还不如 std::acos(-1.0) 可靠。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

5967

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

684

2025.10.23

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5924

2023.10.24

typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

313

2023.09.26

define的用法
define的用法

define用法:1、定义常量;2、定义函数宏:3、定义条件编译;4、定义多行宏。更多关于define的用法的内容,大家可以阅读本专题下的文章。

619

2023.10.11

python如何计算数的阶乘
python如何计算数的阶乘

方法:1、使用循环;2、使用递归;3、使用math模块;4、使用reduce函数。更多详细python如何计算数的阶乘的内容,可以阅读下面的文章。

425

2023.11.13

python求阶乘教程大全
python求阶乘教程大全

本专题整合了python求阶乘相关教程,阅读专题下面的文章了解更多详细内容。

240

2025.11.08

python语言求阶乘
python语言求阶乘

本专题整合了python中阶乘相关教程,阅读专题下面的文章了解更多详细步骤。

387

2025.12.06

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 2 Essentials 免费课程
Conan 2 Essentials 免费课程

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 高级依赖模型介绍
Conan 2 高级依赖模型介绍

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn