博客已搬家到 https://www.wanglp.site)

数据结构课上,老师让我们计算一下pi的10000位,复习一下面向对象。


**First Try:**定义一个高精度类hp(high precision),实现加减乘除,输入输出,然后随便找一个公式,比如Wallis公式,全都用hp进行计算。

**现实是:**大数乘大数或者大数除大数,实在是太慢了。而且Wallis公式收敛太慢。


Second Try先找到一个收敛较快的公司:BBP公式,观察公式发现,其实只需要定义一个具有如下特性的高精度类hp即可:整数部分用一个int表示,小数部分每8位用一个int保存,实现hp相加减,hp乘或除int即可。
HP.h

#ifndef HP_H
#define HP_H
#include<iostream>
#include<cstring>
#include<algorithm>
#include<iomanip>
using namespace std;
const int maxp=1250,maxn=2*maxp,base=1e8,width=8; //maxn表示双精度class hp{public:int prec,s[maxn+10];   //s[0]保留整数部分,后面依次保留8位小数部分hp(){ *this = 0;}hp(int num){ *this = num;}hp operator=(int num);hp operator+( const hp&);hp operator-( const hp&);hp operator*(const int&);hp operator/(const int&);friend ostream& operator<<(ostream &out,const hp&);
};ostream& operator<<(ostream &out,const hp& x){out<<x.s[0]<<"."<<endl;;for(int i=1;i<=x.prec;++i) {out<<setfill('0')<<setw(width)<<x.s[i]<<" ";if(i%10==0) out<<endl;}return out;
}hp hp::operator=(int num){prec=0;s[0]=num;return this;}
hp hp::operator+( const hp& b){hp c;c.prec=max(prec,b.prec);int  x=0;for(int i=c.prec;i>=0;--i){if(i<=prec) x+=s[i];if(i<=b.prec) x+=b.s[i];c.s[i]=x%base;x/=base;}return c;
}hp hp::operator -(const hp&b){hp c;int x=0;c.prec=max(prec,b.prec);for(int i=c.prec;i>=0;--i){if(i<=prec) x+=s[i];if(i<=b.prec) x-=b.s[i];if(x<0){c.s[i]=x+base;x=-1;}else{c.s[i]=x;x=0;}}return c;
}
hp hp::operator *(const int &b){hp c;long long x=0;  //int * int会溢出,用long long过渡c.prec=prec;for(int i=prec;i>=0;--i){x=x+s[i]*(long long )b;c.s[i]=x%base;x/=base;}return c;
}
hp hp::operator/(const int &b){hp c;long long x=0;int i;for( i=0;i<=maxp;++i){if(x==0&&i>prec) break;x=x*base;if(i<=prec) x+=s[i];c.s[i]=x/b; x=x%b;}c.prec=i-1;return c;
}#endif

main()


#include "HP.h"
#include<iostream>
#include<cstdio>
using namespace std;
int main(){hp pi=0,e=1;int tmp=0;for(int i=0;i<10000;++i){pi=pi+e*4/(tmp+1);pi=pi-e*2/(tmp+4);pi=pi-e/(tmp+5);pi=pi-e/(tmp+6);tmp+=8;e=e/16;}cout<<"Pi's first "<<pi.prec*8<<" "<<"digits\n";cout<<pi<<endl;cout << "Totle Time : " << (double)clock() /CLOCKS_PER_SEC<< "s" << endl; return 0;
}

计算pi小数点后10000位相关推荐

  1. c++语言计算圆周率,求C++计算圆周率小数点后10000位的程序,感谢。不知道怎么实现大数...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 6407655904 2909945681 5065265305 3718294127 0336931378 5178609040 7086671149 ...

  2. 求根号2的小数点后10000位,字节面试题随想

    起因 昨天在群里有一个小伙伴发了一道字节后端的面试题, 题干是要求2\sqrt{2}2​的小数点后10000位, 经过自己的一些直观思考和网上查阅资料后, 大致有如下3种方案, 由于很多语言里的小数精 ...

  3. c语言计算pi后1000位,计算圆周率 Pi (π)值, 精确到小数点后 10000 位

    大家都知道π=3.1415926--无穷多位, 历史上很多人都在计算这个数, 一直认为是一个非常复杂的问题.现在有了电脑, 这个问题就简单了. 电脑可以利用级数计算出很多高精度的值, 有关级数的问题请 ...

  4. matlab计算结果小数点后两位,matlab保留小数点后两位.

    这个问题我以前也回答过,matlab里面好像只能对总的有效位数进行控制,只对小数的话目前没有太好的办法.有些方法是可以用的,就是太复杂了,比如说 方法1:digits+vpa 方法 该方法是用digi ...

  5. C语言实验 圆周率1193,【圆周率】小数点后10000位,4个4个分,你能找到那些配对?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 4425 3223 4157 6233 6106 4250 6390 4975 0086 5627 1095 3591 9465 8975 1413 10 ...

  6. java求pi_java计算PI后面的100位小数点

    首先,这个题目是以前读书时候竞赛上出现的一道题目,当时没有做出来,我只是知道思路,因为数太大没计算出现:最近刚好复习BigInteger和BigDecimal 的知识,而不能用double,就想到了这 ...

  7. 经纬度5位数和6位数差多少_经纬度小数点后5位是多少米 经纬度小数点后4位精确到...

    一般情况下,约1米精度. 经纬度坐标数值,不管小数度.还是度分秒(二者实质相同),都是角度数值,跟米.公里等距离单位不能进行简单折算,但可以分具体情况.比如: 经度0.00001度(十万分之一度,0° ...

  8. java 计算26个字母在一段文本中出现的频率(保留小数点后4位)

    public class FrequencyCalculator {public static void main(String[] args){//定义需要计算字母出现频率的文本String tex ...

  9. 课后习题3.2 设圆的半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用cin输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位数字。请编程序。

    课后习题3.2 设圆的半径r=1.5,圆柱高h=3,求圆周长.圆面积.圆球表面积.圆球体积.圆柱体积.用cin输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位数字.请编程序. #inclu ...

最新文章

  1. redis存储java对象存储_Spring-Data-Redis存储对象(redisTemplate)
  2. java常用技术名词解析
  3. POJ-2728 Desert King 最优比例生成树 01分数规划/参数搜索
  4. python敏感词过滤代码简单_大型企业都在用,Python实现敏感词过滤
  5. 流程再造:信息化建设的最佳拍档
  6. 求职信计算机工程师英语作文,开发工程师英文求职信范文
  7. 所有程序员都应该遵守的11条规则
  8. MVP 模式实例解析(转)
  9. 安卓应用安全指南 4.2.2 创建/使用广播接收器 规则书
  10. 【白皮书分享】2021消费者数智化运营白皮书.pdf(附下载链接)
  11. oracle数据库的字符集更改
  12. 最全MD5 密码破解 碰撞 网站
  13. 小米路由器r3d 安装vsftp 记事
  14. 航模入门经典教材:航空模型教材
  15. WebApp 安全入门
  16. php键盘输入函数,基础篇php常用输入语句和函数
  17. NOIP2016普及组T1(买铅笔)题解
  18. FPGA-VGA驱动Color Bar显示
  19. geany的安装与使用
  20. 闲鱼疯转 6800 份!大厂内部数据分析资料首次公开!

热门文章

  1. 曾国藩家书-修身篇 致诸弟·明师益友虚心请教
  2. 图灵学院Java架构师课程,基于java
  3. Python类和对象以及继承多态(超详细,小白也可以懂)
  4. 科研笔记:可用数据集整理(ing)
  5. 用HTML和JavaScript写的RSA加密小工具
  6. CMD连接MySQL,本地phpAdmin登陆
  7. 外包怎么了?请不要“妖魔化”它。
  8. C语言-make概述
  9. Echarts参数属性学习Gird演示案例
  10. Hive学习(7)pmod()函数详解