如何使用BBP公式直接计算π的第n位

使用BBP公式可以直接求得十六进制π的第n位而不需要计算前n位的数(讲道理,我认为是可以计算十进制的第n位的,毕竟其本身就能直接计算出十进制的π,但我没试),其优点在于可以进行分布式计算,即将一个耗时的运算拆分成若干个运算单元在不同的机器上进行并行运算,提高运算效率。同时也可以用来测试计算机的性能。以下公式将直接求出十进制的π:
BBP formula

其中参数k代表的是所求π的精度,例如:当您希望求出π的前13位的话您只需要将k替换成13即可。其计算出来的结果为3.141592653589793238154767...,得出来也是一个无理数,但只有前13位代表Π。

接下来是如何求得十六进制π的第n位。
首先,您需要知道一个知识点:十进制的小数如何转换为十六进制
例如,小数3.1415926转换为16进制为3.243f69a25b094,为了获取第一个16进制的小数,我们只需要取3.1415926的小数部分0.1415925乘以16即可得到2.2654816,结果的整数位数即为16十六进制小数转换后端结果,再取2.2654816的小数部分0.2654816乘以16即可得到第二个16进制小数位,依次类推,当整数部分位10、11、12等大于9的数时,使用a、b、c等代替即可。

所以,如果需要得到16进制π的第n个数,只需要求得16^n*π即可:
π的第n位
其中
π的第n位

计算时,将式子中的j替换为1、4、5、6然后分别代入上式即可。
式子中的k表示精度,d表示需要计算π的哪一位置

继续得到
计算π得第n位

这里有两点值得注意:

  1. 式子中的mod符号意为求模,即取16^(d-k)除以(8k+j)得余数,然后再除以(8k+j),这样做的目的是:在计算过程中就去除整数部分(因为我们只需要的是小数部分,整数部分可以直接去除,这在当数据变得非常大时可以极大提高计算效率)。
  2. 将求和部分拆分为两部分[0,d,正无穷]原因和第一点一样,这样的话后面的式子就一定是个小数。所以,真正在计算过程中一定要保证k>d
    然后将计算结果代入第一个式子中即可

最后,还需要注意的点是:代入之后求得的结果需要先去除整数部分然后再乘以16即可得到16进制π的第n位。并且,为了保证第一个式子中求出来的值不为负值,您可能需要在做第一个减法之前加上一个大于4的整数。

下面贴出java代码:
您需要首先在类中添加常量

    private static final BigDecimal ONE = BigDecimal.ONE;private static final BigDecimal TWO = new BigDecimal(2);private static final BigDecimal FOUR = new BigDecimal(4);private static final BigDecimal FIVE = new BigDecimal(5);private static final BigDecimal SIX = new BigDecimal(6);private static final BigDecimal EIGHT = new BigDecimal(8);private static final BigDecimal SIXTEEN = new BigDecimal(16);

以下为方法实现代码,其中calc16dPI即表示计算(16^d)*πcalc16dSj即表示计算(16^d)*Sj,可以看到,我将k(即代码中的ACCURACY)设置为了d+10,这个数是我随便设置的,你也可以将其设置成其他的,具体影响大不大我还没研究。

    BigDecimal calc16dPI(int d) {return FOUR.multiply(calc16dSj(d, 1)).add(BigDecimal.valueOf(3)).subtract(TWO.multiply(calc16dSj(d, 4)).divideAndRemainder(ONE)[1]).subtract(calc16dSj(d, 5).divideAndRemainder(ONE)[1]).subtract(calc16dSj(d, 6).divideAndRemainder(ONE)[1]).divideAndRemainder(ONE)[1];}BigDecimal calc16dSj(int d, int j) {int ACCURACY = d + 10;BigDecimal part1 = BigDecimal.ZERO;BigDecimal part2 = BigDecimal.ZERO;for (int k = 0; k <= d; k++) {part1 = part1.add(SIXTEEN.pow(d - k).divideAndRemainder(EIGHT.multiply(BigDecimal.valueOf(k)).add(BigDecimal.valueOf(j)))[1].divide(EIGHT.multiply(BigDecimal.valueOf(k)).add(BigDecimal.valueOf(j)), ACCURACY, BigDecimal.ROUND_HALF_UP));}for (int k = d + 1; k < ACCURACY; k++) {part2 = part2.add(ONE.divide(SIXTEEN.pow(k - d).multiply(EIGHT.multiply(BigDecimal.valueOf(k)).add(BigDecimal.valueOf(j))), ACCURACY, BigDecimal.ROUND_HALF_UP));}return part1.add(part2);}

以下为测试方法,计算十六进制π的前100位,注意在结果上乘以一个16

    @Testpublic void mainCalc() {for (int d = 0; d < 100; d++) {System.out.println("index of " + (d + 1) + ": " + calc16dPI(d).multiply(SIXTEEN));}}

运行结果截图:
运行结果

分别得到2、4、3、15、6、10、8、8、8、5...则π的十六进制数应该为3.243f6a8885...(整数位3是我手动加上去的)
参考 我有点酷
参考 维基百科 和 The BBP Algorithm for Pi
如果您有什么需要补充或者我说错的地方欢迎发邮件给我 zouheng613@163.com
bingo

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

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

相关文章

成功率100%的通达信指标公式,你敢相信吗?

前几天&#xff0c;有人问能不能把通达信副图公式改成选股公式。我把指标公式加载到副图&#xff08;如上图&#xff09;&#xff0c;发现这个指标真是牛了&#xff0c;成功率100%&#xff0c;发出信号的之后两天&#xff0c;总是能涨。难道找到了交易的圣杯&#xff0c;如果按…

能正常支付的的虚拟信用卡汇总

前言 OpenAi采用的是Stripe Checkout进行付款&#xff0c;理论上支持大多数卡种&#xff0c;包括Visa、万事达和银联等。然而&#xff0c;由于OpenAI在Stripe中限制了部分国家的银行卡支付&#xff0c;因此可能会出现一些支付问题。最近您尝试使用了不少卡种&#xff0c;包括实…

ChatGPT专业应用:文章相似度比较

正文共 683 字&#xff0c;阅读大约需要 4 分钟 学术研究/编辑人员必备技巧&#xff0c;您将在4分钟后获得以下超能力&#xff1a; 文章相似度比较 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | Kim 编辑者 | Zara ●…

chatgpt赋能python:Python波形分析:分析信号与数据

Python波形分析&#xff1a;分析信号与数据 Python是一种流行的编程语言&#xff0c;用于数据分析和科学计算。在科学和工程领域中&#xff0c;波形分析是一种流行的数据分析技术。Python为波形分析提供了强大的工具&#xff0c;可以使工程师和科学家轻松地处理和分析复杂的信…

大模型相关技术综述

多模态大模型&大模型训练语料持续迭代 已经开始整理多模态-视觉部分&#xff1a; 主要分为一下几块 多模态信息压缩模型&#xff08;clip、vit、swiT&#xff09; 生成模型&#xff08;vae、gan、flow、ddpm、sde...) 其它多模态大模型&#xff08;语音、视频、slam、3d&am…

人工智能各领域跨界能手——Transformer

导读&#xff1a;Transformer源自于AI自然语言处理任务&#xff1b;在计算机视觉领域&#xff0c;近年来Transformer逐渐替代CNN成为一个热门的研究方向。此外&#xff0c;Transformer在文本、语音、视频等多模态领域也在崭露头角。本文对Transformer从诞生到逐渐壮大为AI各领域…

国内大模型领域进入乱战时代

国内大模型领域进入乱战时代 2023.4.12版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 什么是大模型 大模型&#xff0c;又称为预训练模型、基础模型等&#xff0c;是指模型参数数量很大&#xff0c;需要大量计算资源才能训练的深度学习…

Koala:加州大学BAIR团队使用ChatGPT蒸馏数据和公开数据集微调LLaMA模型得到

自从Meta发布LLaMA以来&#xff0c;围绕它开发的模型与日俱增&#xff0c;比如Alpaca、llama.cpp、ChatLLaMA以及Vicuna等等&#xff0c;相关的博客可以参考如下&#xff1a; 【Alpaca】斯坦福发布了一个由LLaMA 7B微调的模型Alpaca&#xff08;羊驼&#xff09;&#xff0c;训…

火爆全网的ChatGPT对话数据可视化,分析数据可视化的应用和发展

ChatGPT为一款由OpenAI开发的人工智能聊天软件。2022年11月30日上映。截至2023年1月底&#xff0c;其月活跃用户超过1亿&#xff0c;是有史以来增长最快的消费应用。 今年AIGC&#xff08;是指利用人工智能技术来生成内容&#xff09;频繁出圈&#xff0c;先是一个基于diffusio…

划时代的腾讯NTQQ来了!

腾讯发布NTQQ&#xff0c;在互联网界引发不小的骚动。 QQ作为一款老牌国民件&#xff0c;已经火了24年。 忆往昔&#xff0c;非主流的装扮&#xff0c;还有每次登陆QQ时&#xff0c;响起的那声“咳咳”声&#xff0c;都是大家对QQ的独家记忆&#xff0c;是陪伴了自己整个青春…

腾讯回应与Meta VR头显合作传闻;美国考虑限制中国用户使用美国云计算服务;ChatGPT暂停联网测试|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

信息系统基本知识(四)新技术

大纲 信息系统与信息化信息系统开发方法常规信息系统集成技术软件工程新一代信息技术信息系统安全技术信息化发展与应用信息系统服务管理信息系统服务规划企业首席信息管及其责任 1.5 新一代技术 1.5.1 物联网 概念&#xff1a;&#xff08;The Internet of Things&#xf…

原创 | 带你走近2022全球人工智能大会--IDEAS(2022)会议实录

作者&#xff1a;杨金珊审校&#xff1a;陈之炎本文约3500字&#xff0c;建议阅读7分钟大会内容包括人工智能和自动化、大数据和基础设施、机器学习和深度学习、数据可视化、数据分析、医疗保健和物联网、商业实践和数据安全。 2022年12月18日&#xff0c;由国际数据与工程协会…

Web3中文|AI机器人ChatGPT如何看待DeFi?

如果还没有玩过OpenAI最新的聊天机器人ChatGPT&#xff0c;那您真的应该体验一下。 从电影推介到编程查询&#xff0c;ChatGPT几乎可以对您向它提出的任何提示做出类似人类的逻辑响应。这种新奇的感觉就像乔布斯第一次滑动解锁iPhone屏幕时那样。 与加密货币一样&#xff0c;…

chatgpt赋能python:Python提取指定数据的方法与技巧

Python提取指定数据的方法与技巧 在SEO优化中&#xff0c;数据的提取和分析是非常重要的环节之一。而Python具有方便易用的数据处理能力&#xff0c;成为了SEO优化工程师们的重要工具之一。本文将介绍Python中提取指定数据的方法与技巧&#xff0c;以及实现的具体案例。 数据…

用ChatGPT写一个数据采集程序

入门教程、案例源码、学习资料、读者群 请访问&#xff1a;python666.cn 大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 上次我们讨论了ChatGPT在辅助编程学习上的一些用法&#xff1a; 如何用ChatGPT学Python 既然ChatGPT可以理解并生成代码&#xff0c;那么自然…

数据提取软件----GetData

上次&#xff0c;我给大家推荐了一款数据提取软件WebPlotDigitizer&#xff0c;不知大家用起来感觉怎么样&#xff0c;其实类似的软件还有很多&#xff0c;今天我继续给大家推荐一款老牌数据提取软件GetData&#xff0c;相信不少小伙伴们也听说过它&#xff0c;接下来让我们详细…

全方位解读智能中控屏发展趋势!亚马逊Alexa语音+Matter能力成必备

随着智能家居行业逐步从碎片化的智能单品阶段&#xff0c;迈向体验更完整的全屋互联阶段&#xff0c;智能中控屏作为智能家居最佳的入口之一&#xff0c;在年轻人青睐全屋智能装修的风潮下&#xff0c;市场潜力彻底被引爆。 一、为什么是智能中控屏&#xff1f; 在智能音箱增…

云边端协同的遐想

前言 去年打比赛&#xff0c;老师给我们的项目定了个名字&#xff0c;叫“基于xxx的xxx云边端协同管理系统”&#xff0c;之前就是照着念&#xff0c;完全不懂什么意思&#xff0c;最近接触云边端这个概念比较多&#xff0c;所以想借此深入了解&#xff0c;同时也表达我对于此…