博客已搬家到 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 ope