mirror of
https://gitee.com/NorthCityChen/stl-go.git
synced 2025-05-25 12:01:08 +00:00
80 lines
1.2 KiB
Go
80 lines
1.2 KiB
Go
/*
|
||
* @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
|
||
}
|