为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
忽然笑 2023-04-24 16:48:08
如何获取以 16 为基数的数学/大 Int 变量的日志。任何帮助都会很棒,因为我是 Go 的新手并且来自 Python 和 C 环境s := "c6d86e5a2cb4bc532361c2d4940f0b1a0138066e25d65c1c530d080b11f8ca24" // Hex valuei := 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 = 0xc6d86e5a2cb4bc532361c2d4940f0b1a0138066e25d65c1c530d080b11f8ca24a>> 89940344608680314083397671686667731393131665861770496634981932531495305005604Lmath.log(a)/math.log(16.0)答案原来是 63.908875905794794
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

对于 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 个精确数字


查看完整回答
反对 回复 2023-04-24
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

对数的一个有趣特性是基数变化实际上非常容易。


log_b (x) = log_a (x) / log_a (b)

所以如果你想得到log_16 (x),你可以使用Log函数并改变基数:


log_e (x) = log_16 (x) / log_16 (e)

log_16 (e) = approximately 0.36067 

=> log_16 (x) = 0.36067 * log_e (x)

所以在 Go 中,我认为这将是:


li := Log(i) * 0.36067

编辑:当我写上面的答案时,我没有意识到这Log不适用于 Big Int。阅读Go Github,看起来这是该语言的一项请求功能,由于缺乏令人满意的快速解决方案而尚未实现。从我读到的内容来看,目前最好的解决方案是,如果你必须使用 Big Int,可能是泰勒级数的实现,在我看来这将是非常重要的。我链接到的线程表明可能存在一个或多个这样的实现,但不一定在计算上是正确的。


查看完整回答
反对 回复 2023-04-24
?
守着一只汪

TA贡献1872条经验 获得超3个赞

首先,您需要通过在开头添加“0x”将十六进制字符串转换为正确的十六进制表示法。接下来写一个log16方法,用来strconv获取整数,而不是float64用于方法的输入log。注意:此解决方案不处理整数溢出。


package main


import (

    "fmt"

    "math"

    "strconv"

)


func log16(x float64) float64 {

    return math.Log(x)/math.Log(16.0)   

}


func main() {

    s := "c6d86e5a2cb4bc532361c2d4940f0b1a0138066e25d65c1c530d080b11f8ca24"

    s1 := "0x" + s

    h, _ := strconv.ParseInt(s1,0,64)

    fmt.Println(log16(float64(h)))


}


查看完整回答
反对 回复 2023-04-24
  • 3 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信