进行高进度运算的时候unint64已经无法满足需求,这个时候大家可以采用math.big库来进行高进度计算,下面以计算第10000位的菲波纳切数来展示big的用法,代码如下:

package main

import (
"fmt"
"math/big"
"time"
) const LIM = //求第10000位的费布拉切数 var fibs [LIM]*big.Int //使用数组保存计算出来的费布拉切数的指针 func main() {
result := big.NewInt()
start := time.Now()
for i := ; i < LIM; i++ {
result = fibonacci(i)
if i == LIM- {
fmt.Printf("fibonacci(%d) is: %d\n", i, result)
}
} fmt.Println(result)
fmt.Printf("%T\n", result)
end := time.Now()
delta := end.Sub(start)
fmt.Printf("longCalculation took this amount of time: %s\n", delta)
} func fibonacci(n int) (res *big.Int) {
if n <= {
res = big.NewInt()
} else {
temp := new(big.Int)
res = temp.Add(fibs[n-], fibs[n-])
}
fibs[n] = res
return
}

计算结果正确,但是使用这个方法计算费布拉切不仅耗时而且占用太多的内存,可以定义两个变量去保存最近的前两个结果,这个就不用占用太多的内存,这样的话求第10000的费布拉切数的耗时可以降很多,如果还想将耗时降低的话,可以使用矩阵和快递幂运算,这样就可以将耗时降到us级别!

Go语言的big包实现大整数运算
    // bigint project main.go
package main import (
"fmt"
"math"
"math/big"
) func main() {
// Here are some calculations with bigInts:
im := big.NewInt(math.MaxInt64)
in := im
io := big.NewInt()
ip := big.NewInt()
ip.Mul(im, in).Add(ip, im).Div(ip, io)
fmt.Printf("Big Int: %v\n", ip)
iq := big.NewInt()
ip.Mod(ip, iq)
fmt.Printf("Big Int: %v\n", ip)
}

程序说明:

1.math包中包含有各种功能函数,包括最大的整数math.MaxInt64

2.math/big包可以用于大整数计算

3.大整数可以使用"%v"格式输出

另外,显式初始化一个大数只能到上限math.MaxInt64,如果想设置比这还大的数,则只能使用如下方法,即从byte到big int:

Convert byte array to big.Int

import "math/big"

z := new(big.Int)
z.SetBytes(byteSliceHere)

or:

func Base64ToInt(s string) (*big.Int, error) {
data, err := base64.StdEncoding.DecodeString(s)
if err != nil {
return nil, err
}
i := new(big.Int)
i.SetBytes(data)
return i, nil
}

Convert String to big.Int

使用 math/big 的内置函数:

func (z *Int) SetString(s string, base int) (*Int, bool)

示例:

package main

import (
"fmt"
"math/big"
) func main() {
n := new(big.Int)
n, ok := n.SetString("", )
if !ok {
fmt.Println("SetString: error")
return
}
fmt.Println(n)
}

Convert a bigint to a string in Go :

bigint := big.NewInt()
bigstr := bigint.String()

golang 的 math/big 进行的更多相关文章

  1. golang之math/rand随机数

    简单的随机数生成,结合时间模块初始化种子 package main import ( "fmt" "math/rand" "time" ) ...

  2. golang中math常见数据数学运算

    package main import ( "fmt" "math" ) func main() { fmt.Println(math.Abs(-19)) // ...

  3. Golang的基础数据类型-浮点型

    Golang的基础数据类型-浮点型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.浮点型概述 Go语言提供两种精度的浮点数,即float32和float64,其中float32 ...

  4. 6.Python3标准库--数学运算

    ''' 作为一种通用的变成语言,Python经常用来解决数学问题.它包含一些用于管理整数和浮点数的内置类型,这很适合完成一般应用中可能出现的基本数学运算. 而标准库中包含一些用于满足更高级需求的模块. ...

  5. golang——随机数(math/rand包与crypto/rand包)

    1.math/rand 包 1.1.math/rand 包实现了伪随机数生成器 1.2.主要方法 (1)func Seed(seed int64) 设置随机种子,不设置则默认Seed(1) (2)fu ...

  6. Golang 语法学习笔记

    Golang 语法学习笔记 包.变量和函数. 包 每个 Go 程序都是由包组成的. 程序运行的入口是包 main. 包名与导入路径的最后一个目录一致."math/rand" 包由 ...

  7. golang 裸写一个pool池控制协程的大小

    这几天深入的研究了一下golang 的协程,读了一个好文 http://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=2653369770& ...

  8. Golang语法与代码格式速记【转】

    // Description: Golang语法与代码格式速记 // Author: cxy // Date: 2013-04-01 // Version: 0.3 // TODO 说明 // TOD ...

  9. golang笔记——函数与方法

    如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的. package math func Sin(x float64) float //implemented in assembly lang ...

随机推荐

  1. Django读取Mysql数据并显示在前端

    一.首先按添加网页的步骤添加网页,我的网页名为table.html, app名为web table.html放到相应目录下, froms文件提前写好 修改views.py ? 1 2 3 4 5 6 ...

  2. Android Studio开发第一篇QuickStart

    为什么把as的环境开发放在gradle里呢,因为eclipse里装gradle插件还是不够方便,as直接集成了,然后正好as也是大势所趋,学习一下正好. 看到右边Quick Start快速启动栏下面 ...

  3. Ubuntu屏幕录像软件推荐-Kazam

    sudo apt-get install kazam https://blog.csdn.net/weixin_40153532/article/details/79337630

  4. F - Unix ls

    The computer company you work for is introducing a brand new computer line and is developing a new U ...

  5. 180425、cookie工具类

    package com.thinkgem.jeesite.common.utils; import java.io.UnsupportedEncodingException; import java. ...

  6. Flask web开发之路五

    Jinjia2模板 紧接着上篇博客,接下去写if条件判断和for循环遍历以及过滤器 if条件判断 主app文件代码: from flask import Flask,render_template a ...

  7. python如何去掉字符串‘\xa0’

    发现问题: 最近在用爬虫爬取网页信息时,在网页源码中遇到了“&nbsp"字符串,经查阅,发现该字符是不间断空格符.我们通常所用的空格是 \x20 ,是在标准ASCII可见字符 0x2 ...

  8. 在PHP系统里连接MySQL 数据访问,+ + + + + 数据删除

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. ABP之事件总线(1)

    什么是事件总线呢?官方的文档说,它是一个单例对象,由其他的类共同拥有,可以用来触发和处理事件.这个东西确实比较陌生,为什么要使用事件总线,或者说事件总线的优势是什么???首先我们可以明确的是,事件总线 ...

  10. 配对堆优化Dijkstra算法小记

    关于配对堆的一些小姿势: 1.配对堆是一颗多叉树. 2.包含优先队列的所有功能,可用于优化Dijkstra算法. 3.属于可并堆,因此对于集合合并维护最值的问题很实用. 4.速度快于一般的堆结构(左偏 ...