go - 如何在 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
解决方案
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 位精确数字
推荐阅读
- javascript - JavaScript - 实例的复制方法
- cocoa - 如何从 NSToolbarItem 子类获取对 NSWindow 的引用
- java - 为什么有些元素存在但不可交互/显示?
- javascript - 如何动态定义 PWA 的起始页
- angular - 在 ag-grid 中使用 rowDrag 和 dndSource
- django - 在 CI 期间在 Django 测试数据库中启用 PSQL hstore 扩展
- android - task.getResult().exists() 总是将我传递给相同的 if 条件
- excel - 从表中查找,列位于不同的工作簿上
- c - 与 strtok 一起使用的 C 自由变量
- reactjs - 在测试反应组件和运行测试覆盖率时,这些绿色数字代表什么?