go - 如何在 Golang 中计算 256 位整数的 log16

标签 go math

如何获取以 16 为基数的数学/大 Int 变量的日志。

任何帮助都会很棒,因为我是 Go 的新手并且来自 Python 和 C 环境

s := "c6d86e5a2cb4bc532361c2d4940f0b1a0138066e25d65c1c530d080b11f8ca24" // Hex value
i := new(big.Int)
i.SetString(s, 16) // hex value to Big Int
// how to get the log with base 16 for a math/big Int variable.

它在 python 中是如何工作的

import math 
a = 0xc6d86e5a2cb4bc532361c2d4940f0b1a0138066e25d65c1c530d080b11f8ca24
a>> 89940344608680314083397671686667731393131665861770496634981932531495305005604L
math.log(a)/math.log(16.0)

答案原来是63.908875905794794

最佳答案

对于 log16 和 hex 输入有特定的方法,无需长时间的算术运算。

要获得整数(底数)结果,只需计算十六进制数字。在这种情况下有 63 位数字,所以你有

  FloorLog16 = 63

现在获取前 8 个数字(更多以提高精度)

  b = 0xc6d86e5a

得到log16

 p = log(b) / log(16) = 7.908875905775919

使用这个结果的小数部分使对数更精确

fp = p - Floor(p) = 0.908875905775919
log16(0xc6d86e5a2cb4bc532361c2d4940f0b1a0138066e25d65c1c530d080b11f8ca24) = 
      63 + 0.908875905775919 = 63.908875905775919

注意 12 个精确数字

关于go - 如何在 Golang 中计算 256 位整数的 log16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52917461/

相关文章:

go - 逐步计算

algorithm - 是否有一种算法可以从一组公式中提取最少数量的笛卡尔积?

java - 非常大的数字的 Diffie-Hellman 计算

json - golang 嵌套结构和映射

go - 尽管在 golang 中匹配参数,为什么我不能将 func 文字用作自定义 func 类型?

go - 直到我必须返回Go中的错误的哪个阶段?

json - 从 GoLang 中的 JSON 文件读取时获取空白值

c - NxN矩阵行列式递归问题

java - 以正确的方式将经度和纬度坐标转换为 map 像素(X 和 Y)

python - 确定振荡信号上的事件位置