stl-go/math/math.go
2022-04-03 09:33:42 +08:00

80 lines
1.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @Author: NorthCity1984
* @LastEditTime: 2022-04-03 09:32:48
* @Description:
* @Website: https://grimoire.cn
* Copyright (c) NorthCity1984 All rights reserved.
*/
package math
import "math"
type Number interface {
int | int32 | int64 | float32 | float64
}
// 返回n个数中的最小值
func Max[T Number](arg T, args ...T) T {
var maxNum T = arg
for _, val := range args {
if maxNum < val {
maxNum = val
}
}
return maxNum
}
// 返回n个数中的最大值
func Min[T Number](arg T, args ...T) T {
var minNum T = arg
for _, val := range args {
if minNum > val {
minNum = val
}
}
return minNum
}
// 返回n个数的和
func Sum[T Number](args ...T) (sum T) {
for _, val := range args {
sum += val
}
return sum
}
// 返回num的绝对值
func Abs[T Number](num T) T {
if num < 0 {
num *= -1
}
return num
}
// 返回 2**n
func Exp2(num int) int64 {
var ans int64 = 1
for i := 0; i < num; i++ {
ans <<= 1
}
return ans
}
// 返回x的平方根精度比原生略低
func Sqrt(x float64) float64 {
if x < 0 {
return math.NaN()
}
if x == 0 {
return 0
}
last, res := 0.0, 1.0
for last != res {
last = res
res = (res + x/res) / 2
}
return res
}