diff --git a/util/math/math.go b/util/math/math.go index b1202f1..f015c74 100644 --- a/util/math/math.go +++ b/util/math/math.go @@ -1,5 +1,7 @@ package math +import "github.com/duanhf2012/origin/log" + type NumberType interface { int | int8 | int16 | int32 | int64 | float32 | float64 | uint | uint8 | uint16 | uint32 | uint64 } @@ -35,3 +37,42 @@ func Abs[NumType SignedNumberType](Num NumType) NumType { return Num } + + +func Add[NumType NumberType](number1 NumType, number2 NumType) NumType { + ret := number1 + number2 + if number2> 0 && ret < number1 { + log.SStack("Calculation overflow , number1 is ",number1," number2 is ",number2) + }else if (number2<0 && ret > number1){ + log.SStack("Calculation overflow , number1 is ",number1," number2 is ",number2) + } + + return ret +} + +func Sub[NumType NumberType](number1 NumType, number2 NumType) NumType { + ret := number1 - number2 + if number2> 0 && ret > number1 { + log.SStack("Calculation overflow , number1 is ",number1," number2 is ",number2) + }else if (number2<0 && ret < number1){ + log.SStack("Calculation overflow , number1 is ",number1," number2 is ",number2) + } + + return ret +} + + +func Mul[NumType NumberType](number1 NumType, number2 NumType) NumType { + ret := number1 * number2 + if number1 == 0 || number2 == 0 { + return ret + } + + if ret / number2 == number1 { + return ret + } + + log.SStack("Calculation overflow , number1 is ",number1," number2 is ",number2) + return ret +} +