ipld-eth-server/vendor/gopkg.in/karalabe/cookiejar.v2/exts/mathext/math.go

104 lines
1.9 KiB
Go
Raw Normal View History

// CookieJar - A contestant's algorithm toolbox
// Copyright (c) 2013 Peter Szilagyi. All rights reserved.
//
// CookieJar is dual licensed: use of this source code is governed by a BSD
// license that can be found in the LICENSE file. Alternatively, the CookieJar
// toolbox may be used in accordance with the terms and conditions contained
// in a signed written agreement between you and the author(s).
// Package mathext contains extensions to the base Go math package.
package mathext
import "math/big"
const (
maxInt = int(^uint(0) >> 1)
minInt = int(-maxInt - 1)
)
// AbsInt returns the absolute value of the x integer.
//
// Special cases are:
// AbsInt(minInt) results in a panic (not representable)
func AbsInt(x int) int {
if x >= 0 {
return x
}
if x == minInt {
panic("absolute overflows int")
}
return -x
}
// MaxInt returns the larger of x or y integers.
func MaxInt(x, y int) int {
if x > y {
return x
}
return y
}
// MaxBigInt returns the larger of x or y big integers.
func MaxBigInt(x, y *big.Int) *big.Int {
if x.Cmp(y) > 0 {
return x
}
return y
}
// MaxBigRat returns the larger of x or y big rationals.
func MaxBigRat(x, y *big.Rat) *big.Rat {
if x.Cmp(y) > 0 {
return x
}
return y
}
// MinInt returns the smaller of x or y integers.
func MinInt(x, y int) int {
if x < y {
return x
}
return y
}
// MinBigInt returns the smaller of x or y big integers.
func MinBigInt(x, y *big.Int) *big.Int {
if x.Cmp(y) < 0 {
return x
}
return y
}
// MinBigRat returns the smaller of x or y big rationals.
func MinBigRat(x, y *big.Rat) *big.Rat {
if x.Cmp(y) < 0 {
return x
}
return y
}
// SignInt returns the sign of the x integer.
func SignInt(x int) int {
switch {
case x > 0:
return 1
case x == 0:
return 0
default:
return -1
}
}
// SignFloat64 returns the sign of the x floating point number.
func SignFloat64(x int) int {
switch {
case x > 0:
return 1
case x == 0:
return 0
default:
return -1
}
}