Algorithm Gossip (17) 长 PI
来源:互联网 发布:ubuntu 16.04镜像文件 编辑:程序博客网 时间:2024/04/20 11:20
前言
This Series aritcles are all based on the book 《经典算法大全》; 对于该书的所有案例进行一个探究和拓展,并且用python和C++进行实现; 目的是熟悉常用算法过程中的技巧和逻辑拓展。
提出问题
17.Algorithm Gossip: 长 PI
为了更精确的求出 PI , 这里的长 PI 法则运用到了一个圆周率公式, 有兴趣的可以研究下, 这里单纯考察的就是模式的应用和推导。
另外为了辅助运算, 可以自行搜索 下sin(23), ln(2) 等数值通过泰拉公式展开的结果进行运算。
评价
送分类型, 无亮点。
分析和解释
代码
C 实现
#include <stdio.h>#define L 1000#define N L/4+1void add(int*, int*, int*);void sub(int*, int*, int*);void div(int*, int, int*);int main(void) { int s[N+3] = {0}; int w[N+3] = {0}; int v[N+3] = {0}; int q[N+3] = {0}; int n = (int)(L/1.39793 + 1); int k; w[0] = 16*5; v[0] = 4*239; for(k = 1; k <= n; k++) { div(w, 25, w); div(v, 239, v); div(v, 239, v); sub(w, v, q); div(q, 2*k-1, q); if(k%2) add(s, q, s); else sub(s, q, s); } printf("%d.", s[0]); for(k = 1; k < N; k++) printf("%04d", s[k]); printf("\n"); return 0; }void add(int *a, int *b, int *c) { int i, carry = 0; for(i = N+1; i >= 0; i--) { c[i] = a[i] + b[i] + carry; if(c[i] < 10000) carry = 0; else { c[i] = c[i] - 10000; carry = 1; } } }void sub(int *a, int *b, int *c) { int i, borrow = 0; for(i = N+1; i >= 0; i--) { c[i] = a[i] - b[i] - borrow; if(c[i] >= 0) borrow = 0; else { c[i] = c[i] + 10000; borrow = 1; } } }void div(int *a, int b, int *c) { int i, tmp, remain = 0; for(i = 0; i <= N+1; i++) { tmp = a[i] + remain; c[i] = tmp / b; remain = (tmp % b) * 10000; } }
拓展和关联
后记
参考书籍
- 《经典算法大全》
- 维基百科
0 0
- Algorithm Gossip (17) 长 PI
- Algorithm Gossip:长PI
- Algorithm Gossip: 蒙地卡罗法求PI
- Algorithm Gossip(14) 蒙地卡罗法求 PI
- Algorithm Gossip: 三色棋
- Algorithm Gossip: 三色棋
- Algorithm Gossip: 数字拆解
- Algorithm Gossip:三色棋
- Algorithm Gossip:生命游戏
- Algorithm Gossip: 字串核对
- Algorithm Gossip: 完美数
- Algorithm Gossip: 阿姆斯壮数
- Algorithm Gossip: 稀疏矩阵
- Algorithm Gossip: 得分排行
- Algorithm Gossip (END)
- Algorithm Gossip: 超長整數運算(大數運算)
- Algorithm Gossip: 中序式轉後序式(前序式)
- Algorithm Gossip: 费式数列
- 跨站的艺术-XSS Fuzzing 的技巧
- bzoj4659: Lcm
- qt中用opencv读取视频并抓取图像
- erlang实现堆
- Linux编程之PING的实现
- Algorithm Gossip (17) 长 PI
- 腾讯云数据库团队:PostgreSQL TOAST技术理解
- 手掌静脉识别——利用深度学习进行ROI的选取
- VS+VSS源代码管理_编辑时不自动签出
- Git commit message和工作流规范
- linux CentOS 7.2 服务器配置apache+mysql+php环境 (linux 系统下LAMP部署)
- 字符串模式匹配
- Java多线程中interrupt interrupted isInterrupted
- Bungee Jumping 物理题 能量关系