293dd2e848
* Add vendor dir so builds dont require dep * Pin specific version go-eth version
104 lines
1.9 KiB
Go
Executable File
104 lines
1.9 KiB
Go
Executable File
// 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
|
|
}
|
|
}
|