mirror of
https://github.com/charlienet/go-mixed.git
synced 2025-07-18 00:22:41 +08:00
update
This commit is contained in:
18
mathx/int.go
18
mathx/int.go
@ -3,18 +3,32 @@ package mathx
|
||||
import (
|
||||
"github.com/charlienet/go-mixed/expr"
|
||||
"golang.org/x/exp/constraints"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// MaxInt returns the larger one of v1 and v2.
|
||||
// Max returns the larger one of v1 and v2.
|
||||
func Max[T constraints.Ordered](v1, v2 T) T {
|
||||
return expr.Ternary(v1 > v2, v1, v2)
|
||||
}
|
||||
|
||||
// MinInt returns the smaller one of v1 and v2.
|
||||
// Min returns the smaller one of v1 and v2.
|
||||
func Min[T constraints.Ordered](v1, v2 T) T {
|
||||
return expr.Ternary(v1 < v2, v1, v2)
|
||||
}
|
||||
|
||||
func Abs1[T constraints.Signed](n T) T {
|
||||
shift := 63
|
||||
switch unsafe.Sizeof(n) {
|
||||
case 1:
|
||||
shift = 7
|
||||
case 4:
|
||||
shift = 31
|
||||
}
|
||||
|
||||
y := n >> shift
|
||||
return T((n ^ y) - y)
|
||||
}
|
||||
|
||||
func Abs(n int64) int64 {
|
||||
y := n >> 63
|
||||
return (n ^ y) - y
|
||||
|
Reference in New Issue
Block a user