ZeroBot-Plugin/utils/math/math.go
2022-01-08 13:56:19 +08:00

48 lines
1.1 KiB
Go

// Package math 计算实用工具
package math
// Max 返回两数最大值,该函数将被内联
func Max(a, b int) int {
if a > b {
return a
}
return b
}
// Min 返回两数最小值,该函数将被内联
func Min(a, b int) int {
if a > b {
return b
}
return a
}
// intSize is either 32 or 64.
const intSize = 32 << (^uint(0) >> 63)
// Abs 返回绝对值,该函数将被内联
func Abs(x int) int {
// m := -1 if x < 0. m := 0 otherwise.
m := x >> (intSize - 1)
// In two's complement representation, the negative number
// of any number (except the smallest one) can be computed
// by flipping all the bits and add 1. This is faster than
// code with a branch.
// See Hacker's Delight, section 2-4.
return (x ^ m) - m
}
// Abs64 返回绝对值,该函数将被内联
func Abs64(x int64) int64 {
// m := -1 if x < 0. m := 0 otherwise.
m := x >> (64 - 1)
// In two's complement representation, the negative number
// of any number (except the smallest one) can be computed
// by flipping all the bits and add 1. This is faster than
// code with a branch.
// See Hacker's Delight, section 2-4.
return (x ^ m) - m
}