辅助函数
This commit is contained in:
parent
84057605b2
commit
4f013f593e
|
@ -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
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
Loading…
Reference in New Issue