辅助函数

This commit is contained in:
kercylan98 2023-05-20 11:42:49 +08:00
parent 84057605b2
commit 4f013f593e
2 changed files with 66 additions and 0 deletions

49
utils/maths/math.go Normal file
View File

@ -0,0 +1,49 @@
package maths
// Pow 整数幂运算
func Pow(a, n int) int {
if a == 0 {
return 0
}
if n == 0 {
return 1
}
if n == 1 {
return a
}
var result int = 1
factor := a
for n != 0 {
if n&1 != 0 {
// 当前位是 1需要乘进去
result *= factor
}
factor *= factor
n = n >> 1
}
return result
}
// PowInt64 整数幂运算
func PowInt64(a, n int64) int64 {
if a == 0 {
return 0
}
if n == 0 {
return 1
}
if n == 1 {
return a
}
var result int64 = 1
factor := a
for n != 0 {
if n&1 != 0 {
// 当前位是 1需要乘进去
result *= factor
}
factor *= factor
n = n >> 1
}
return result
}

17
utils/network/float.go Normal file
View File

@ -0,0 +1,17 @@
package network
import (
"fmt"
"github.com/kercylan98/minotaur/utils/generic"
"github.com/kercylan98/minotaur/utils/maths"
"strings"
)
// FloatEnlarge 用于将浮点型放大后进行网络传输,返回放大后的值和放大的倍率
// - 存在精度丢失问题如1.13
func FloatEnlarge[F generic.Float](f F) (value int64, multi int64) {
str := fmt.Sprint(f)
multi = maths.PowInt64(10, int64(len(str[strings.Index(str, ".")+1:])))
value = int64(f * F(multi))
return
}