求圆周率(Go语言实现)
来源:互联网 发布:testok java 编辑:程序博客网 时间:2024/05/19 07:41
求圆周率(Go语言实现)
圆周率算法来源于莱布尼茨公式,效率很低并且精度也不够,以下是运行结果:
[ `go run demo.go` | done: 5m12.5903356s ](即一共运行了5分12秒)[3 1 4 1 5 9 2 5 5 3 5 8 9 7 9 3 2 3 8 4 6 2 8 9 3 3 8 3 2 7 9 5 0 2 8 8 1 0 7 2 1 6 9 3 9 9 3 7 5 2 0 1 1 3 3 4 7 4 9 4 4 5 8 6 8 9 7 6 6 0 1 5 6 2 8 6 7 0 2 3 6 7 7 6 8 6 5 9 7 5 9 3 5 6 6 4 3 4 3 5 1 8 1 8 1 6 1 1 5 1 3 8 7 6 7 6 2 8 9 8 7 1 5 9 6 1 0 9 0 7 7 9 8 7 4 9 4 3 7 5 6 4 1 6 2 5 1 9 9 3 2 1 5 4 2 6 2 9 2 1 8 4 0 5 2 5 6 8 5 7 3 8 9 1 1 1 8 8 9 3 6 8 6 4 4 9 7 9 5 6 7 2 2 0 6 0 1 8 3 0 8 4 0 6 9 0 6 6 8 7 5 2 6 0 9 6 5 5 2 6 6 4 6 0 4 3 0 9 0 6 8 7 1 1 9 1 8 5 0 8 0 3 2 3 7 1 1 5 4 2 9 7 4 4 4 9 1 0 2 9 6 8 4 4 9 5 9 4 0 4 7 0 6 6 6 7 2 4 7 3 4 0 7 3 9 0 7 6 4 3 8 3 7 4 4 4 6 8 0 7 6 2 6 5 7 6 0 1 4 5 2 3 8 7 5 3 6 5 5 6 9 8 9 1 6 4 2 6 9 8 6 8 4 0 7 7 4 0 9 2 5 9 9 6 4 3 6 2 5 7 6 1 1 3 0 7 9 8 6 9 6 0 9 4 6 4 1 6 1 7 2 1 7 2 6 5 4 0 2 2 2 6 0 7 6 8 2 4 4 9 4 6 6 0 8 1 5 2 4 1 2 0 3 2 9 6 8 6 0 8 5 0 4 7 8 9 0 7 3 6 3 0 7 1 4 7 7 0 9 4 7 4 7 2 2 2 2 7 2 1 7 5 2 3 4 7 8 8 6 9 3 2 6 8 0 9 1 4 3 5 3 8 9 4 3 2 8 7 8 5 4 5 6 9 4 4 1 6 4 2 7 3 5 8 4 7 1 9 6 7 6 1 2 1 6 8 1 6 6 0 0 4 8 2 6 2 0 5 4 5 3 1 4 5 7 5 1 1 4 3 7 6 7 3 0 5 7 4 0 3 5 3 7 7 6 4 4 5 1 8 0 3 6 9 8 9 7 8 3 2 5 4 1 6 4 5 2 0 2 6 6 3 0 9 3 2 1 6 4 1 0 4 6 0 0 8 2 4 8 7 0 9 0 0 9 0 2 1 5 6 8 7 0 3 5 8 8 1 4 6 7 6 6 9 1 9 7 4 6 4 5 6 0 2 3 5 5 0 6 2 4 9 4 4 2 6 4 6 6 3 4 7 9 8 5 1 6 9 0 3 0 0 8 1 5 8 3 6 5 1 3 2 9 3 8 2 8 1 0 8 7 9 2 2 1 3 6 4 0 8 1 6 0 5 5 7 2 6 0 6 3 9 4 3 5 1 3 2 2 8 6 0 9 8 5 6 7 9 6 8 4 5 9 0 8 3 5 0 3 9 7 1 3 9 8 4 8 7 9 2 4 7 2 9 7 8 2 1 6 6 1 5 6 7 2 8 8 1 3 9 1 2 6 7 0 0 0 3 7 0 5 1 9 2 6 6 8 3 6 1 9 0 3 4 0 4 0 7 3 2 8 9 5 2 2 1 3 8 9 8 7 7 0 5 1 0 1 1 2 8 5 1 8 8 6 3 9 7 8 2 1 7 3 8 7 3 2 9 4 7 5 3 6 8 1 1 0 1 8 4 8 4 8 9 2 8 5 1 3 3 5 4 0 6 4 0 9 7 3 0 2 4 4 4 2 4 2 0 4 0 1 7 2 8 4 8 4 0 9 6 6 0 0 7 5 9 7 7 0 8 1 1 1 5 1 6 5 9 0 1 4 3 3 9 7 8 9 0 2 3 3 8 2 6 3 3 1 8 2 5 9 5 2 6 0 8 0 3 2 6 5 1 5 5 8 8 6 3 8 7 2 2 4 9 8 2 7 5 8 2 3 7 2 8 3 0 7 1 7 1 1 7 6 7 1 6 8 4 1 2 6 2 2 4 4 3 1 3 8 8 3 5 1 5 5 1 2 8 6 5 2 8 8 9 8 5 2 3 0 2 6 3 6 7 8 0 3 1 1 6 3 9 9 6 5 0 9 6 5 2]
Go语言实现代码:
package mainimport ("fmt")type myInt int32const (SIZE = 120 //数组长度 数据长度小于:120*9TIMES = 10000000 //迭代次数PRESIZE = 1000 //数字的有效位数)/**代码作者:天之*博客:http://blog.csdn.net/WAPWO?viewmode=contents */func main() {res, bRes := make([]byte, PRESIZE), make([]byte, PRESIZE)rab(res, bRes)int4Res(res)fmt.Println("\n", res)}/* 圆周率 4*[1-1/3+1/5-1/7+...] */func rab(res, bRes []byte) {intDiv(2, 3, res)var x myInt = 5for i := 2; i < TIMES; i++ {intDiv(1, x, bRes)if i&1 == 0 {intSum(res, bRes)} else {intDif(res, bRes)}x += 2}}/*四倍的sum*/func int4Res(res []byte) {tmp := make([]byte, PRESIZE)cpyByteArr(tmp, res)intSum(res, tmp)intSum(res, tmp)intSum(res, tmp)}/*求和值 res=res-bRes (因为已知是不会溢出的) */func intSum(res, bRes []byte) {var count bytefor i := PRESIZE - 1; i >= 0; i-- {count = res[i] + bRes[i]if count >= 10 {res[i-1] += 1res[i] = count - 10} else {res[i] = count}}}/*求差值 res=res-bRes (因为已知是不会溢出的) */func intDif(res, bRes []byte) {var j intfor i := PRESIZE - 1; i >= 0; i-- {if res[i] < bRes[i] {for j = i - 1; res[j] == 0; j-- {res[j] = 9}res[j] -= 1res[i] = res[i] - bRes[i] + 10} else {res[i] = res[i] - bRes[i]}}}/*求除数 res=a/b */func intDiv(a, b myInt, res []byte) {var count bytefor i := 0; i < PRESIZE; i++ {count = (byte)(a / b)if count == 0 {a *= 10res[i] = 0} else {a %= ba *= 10res[i] = count}}}/*复制整型数组*/func cpyByteArr(d, s []byte) {for i := 0; i < PRESIZE; i++ {d[i] = s[i]}}
- 求圆周率(Go语言实现)
- C语言实现求圆周率
- 小朋友学C语言(32):求圆周率
- 圆周率计算--C语言实现
- 圆周率计算--C语言实现
- C语言求圆周率的代码
- 求圆周率
- 求圆周率
- 求 圆周率
- 求圆周率
- 求黄金分割比小数点后无限位(大数据运算,Go+Java语言实现)
- 各种求圆周率π的算法(蒙特卡洛法的Java实现)
- 各种求圆周率π的算法(蒙特卡洛法的Java实现)
- c语言 利用分式前n项和求圆周率
- 【matlab 圆周率计算】matlab 求圆周率的两种算法实现比较
- 【语言-汇编】圆周率(PI)计算
- 初学C语言:求圆周率pi的近似值(pi/4=1-1/3+1/5-1/7...)
- 计算餐补(go语言实现)
- 程序员你伤不起的一些谬论
- E: Sub-process /usr/bin/dpkg returned an error code (1)错误解决
- 电子书下载:Delphi XE2 入門指引手冊
- Qt学习笔记4-Widget布局管理
- Fedora5下skyeye安装相关
- 求圆周率(Go语言实现)
- GMP大数库VC使用入门教程
- 分享一个操作xml的代码
- Vim常用命令示意图
- C/C++中最常用字符串函数--不是指string
- iOS学习笔记12-SQLite数据库的简单使用
- Vi 编辑器使用
- Android Studio 在 win7 下的安装和设置
- Android学习笔记——文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)学习