首页 > 解决方案 > 如何在 Golang 中计算 256 位整数的 log16

问题描述

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

任何帮助都会很棒,因为我是 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

标签: gomath

解决方案


log16 和十六进制输入有特定的方法,无需长算法。

要获得整数(下限)结果,只需计算十六进制数字。在这种情况下,有 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 位精确数字


推荐阅读