From 84f3429564ffa3087f75f1cd2415b76c7712469d Mon Sep 17 00:00:00 2001 From: orgin Date: Mon, 8 Aug 2022 15:28:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=A0=E3=80=81=E5=87=8F?= =?UTF-8?q?=E3=80=81=E4=B9=98=E7=9A=84=E8=BF=90=E7=AE=97=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- util/math/math.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) 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 +} +