golang 的 math/big 进行
进行高进度运算的时候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 进行的更多相关文章
- golang之math/rand随机数
简单的随机数生成,结合时间模块初始化种子 package main import ( "fmt" "math/rand" "time" ) ...
- golang中math常见数据数学运算
package main import ( "fmt" "math" ) func main() { fmt.Println(math.Abs(-19)) // ...
- Golang的基础数据类型-浮点型
Golang的基础数据类型-浮点型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.浮点型概述 Go语言提供两种精度的浮点数,即float32和float64,其中float32 ...
- 6.Python3标准库--数学运算
''' 作为一种通用的变成语言,Python经常用来解决数学问题.它包含一些用于管理整数和浮点数的内置类型,这很适合完成一般应用中可能出现的基本数学运算. 而标准库中包含一些用于满足更高级需求的模块. ...
- golang——随机数(math/rand包与crypto/rand包)
1.math/rand 包 1.1.math/rand 包实现了伪随机数生成器 1.2.主要方法 (1)func Seed(seed int64) 设置随机种子,不设置则默认Seed(1) (2)fu ...
- Golang 语法学习笔记
Golang 语法学习笔记 包.变量和函数. 包 每个 Go 程序都是由包组成的. 程序运行的入口是包 main. 包名与导入路径的最后一个目录一致."math/rand" 包由 ...
- golang 裸写一个pool池控制协程的大小
这几天深入的研究了一下golang 的协程,读了一个好文 http://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=2653369770& ...
- Golang语法与代码格式速记【转】
// Description: Golang语法与代码格式速记 // Author: cxy // Date: 2013-04-01 // Version: 0.3 // TODO 说明 // TOD ...
- golang笔记——函数与方法
如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的. package math func Sin(x float64) float //implemented in assembly lang ...
随机推荐
- @Cacheable注解式缓存不起作用的情形
@Cacheable注解式缓存使用的要点:正确的注解式缓存配置,注解对象为spring管理的hean,调用者为另一个对象.有些情形下注解式缓存是不起作用的:同一个bean内部方法调用,子类调用父类中有 ...
- mdadm命令详解
创建阵列(-C或--create) --raid-devices(-n) 功能:指定阵列中成员盘个数. 举例:mdadm --create /dev/md0 -l5 -n2 /dev/sdb /dev ...
- 如何获取类或属性的自定义特性(Attribute)
如何获取类或属性的自定义特性(Attribute) 问题说明: 在ActiveRecord或者其他的ORM等代码中, 我们经常可以看到自定义特性(Attribute)的存在(如下面的代码所示) [Pr ...
- ADT下载地址(申明:来源于网络)
ADT下载地址(含各版本),最新ADT-23.0.6(申明:来源于网络) 地址:http://write.blog.csdn.net/mdeditor
- js事件绑定的几种方式
在JavaScript中,有三种常用的绑定事件的方法: 在DOM元素中直接绑定: 在JavaScript代码中绑定: 绑定事件监听函数 一. 在DOM元素中直接绑定 这里的DOM元素,可以理解为HTM ...
- MySQL介绍,下载,安装,配置
MySQL用了很多年了,今天写个总结. 一.介绍 MySQL是开源软件,后来归Oracle所有.开源便于软件的完善改进.但开源不等于滥用,也不等于完全免费.MySQL有商业版,商业用途是付费的.也有免 ...
- .NET Core开发日志——Middleware
熟悉ASP.NET架构的开发者一定对于HTTP Modules与HTTP Handlers不陌生.两者的作用主要是对网络请求执行特定的处理工作.而在.NET Core中,它们都被Middleware( ...
- ASP.NET Core Web API处理HttpResponseMessage类型返回值的问题
在将我们的 web api 从 .NET Framework 迁移至 .net core(asp.net core 1.1)之后,遇到一个问题. 之前返回值类型为 HttpResponseMessag ...
- 20165311 实验一 Java开发环境的熟悉
一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:李嘉昕 学号:20165311 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验时间:13:45 - 15:25 实验序号:3 实 ...
- 深入 Vue 生命周期
深入 Vue 生命周期 这篇博客将会从下面四个常见的应用诠释组件的生命周期,以及各个生命周期应该干什么事 1.单组件的生命周期 2.父子组件的生命周期 3.兄弟组件的生命周期 4.宏mixin的生命周 ...