package decimal128
import "github.com/apache/arrow-go/v18/arrow/decimal128"
Index ¶
- Constants
- Variables
- type Num
- func FromBigInt(v *big.Int) (n Num)
- func FromFloat32(v float32, prec, scale int32) (Num, error)
- func FromFloat64(v float64, prec, scale int32) (Num, error)
- func FromI64(v int64) Num
- func FromString(v string, prec, scale int32) (n Num, err error)
- func FromU64(v uint64) Num
- func GetHalfScaleMultiplier(pow int) Num
- func GetMaxValue(prec int32) Num
- func GetScaleMultiplier(pow int) Num
- func Max(first Num, rest ...Num) Num
- func Min(first Num, rest ...Num) Num
- func New(hi int64, lo uint64) Num
- func (n Num) Abs() Num
- func (n Num) Add(rhs Num) Num
- func (n Num) BigInt() *big.Int
- func (n Num) Cmp(other Num) int
- func (n Num) Div(rhs Num) (res, rem Num)
- func (n Num) FitsInPrecision(prec int32) bool
- func (n Num) Greater(other Num) bool
- func (n Num) GreaterEqual(other Num) bool
- func (n Num) HighBits() int64
- func (n Num) IncreaseScaleBy(increase int32) Num
- func (n Num) Less(other Num) bool
- func (n Num) LessEqual(other Num) bool
- func (n Num) LowBits() uint64
- func (n Num) Mul(rhs Num) Num
- func (n Num) Negate() Num
- func (n Num) Pow(rhs Num) Num
- func (n Num) ReduceScaleBy(reduce int32, round bool) Num
- func (n Num) Rescale(originalScale, newScale int32) (out Num, err error)
- func (n Num) Sign() int
- func (n Num) Sub(rhs Num) Num
- func (n Num) ToBigFloat(scale int32) *big.Float
- func (n Num) ToFloat32(scale int32) float32
- func (n Num) ToFloat64(scale int32) float64
- func (n Num) ToString(scale int32) string
Constants ¶
const ( MaxPrecision = 38 MaxScale = 38 )
Variables ¶
var (
MaxDecimal128 = New(542101086242752217, 687399551400673280-1)
)
Types ¶
type Num ¶
type Num struct {
// contains filtered or unexported fields
}
Num represents a signed 128-bit integer in two's complement. Calculations wrap around and overflow is ignored.
For a discussion of the algorithms, look at Knuth's volume 2, Semi-numerical Algorithms section 4.3.1.
Adapted from the Apache ORC C++ implementation
func FromBigInt ¶
FromBigInt will convert a big.Int to a Num, if the value in v has a BitLen > 128, this will panic.
func FromFloat32 ¶
FromFloat32 returns a new decimal128.Num constructed from the given float32 value using the provided precision and scale. Will return an error if the value cannot be accurately represented with the desired precision and scale.
func FromFloat64 ¶
FromFloat64 returns a new decimal128.Num constructed from the given float64 value using the provided precision and scale. Will return an error if the value cannot be accurately represented with the desired precision and scale.
func FromI64 ¶
FromI64 returns a new signed 128-bit integer value from the provided int64 one.
func FromString ¶
func FromU64 ¶
FromU64 returns a new signed 128-bit integer value from the provided uint64 one.
func GetHalfScaleMultiplier ¶
func GetMaxValue ¶
func GetScaleMultiplier ¶
func Max ¶
Max returns the largest Decimal128 that was passed in the arguments
func Min ¶
Min returns the smallest Decimal128 that was passed in the arguments
func New ¶
New returns a new signed 128-bit integer value.
func (Num) Abs ¶
Abs returns a new decimal128.Num that contains the absolute value of n
func (Num) Add ¶
func (Num) BigInt ¶
while the code would be simpler to just do lsh/rsh and add it turns out from benchmarking that calling SetBits passing in the words and negating ends up being >2x faster
func (Num) Cmp ¶
Cmp compares the numbers represented by n and other and returns:
+1 if n > other 0 if n == other -1 if n < other
func (Num) Div ¶
func (Num) FitsInPrecision ¶
FitsInPrecision returns true or false if the value currently held by n would fit within precision (0 < prec <= 38) without losing any data.
func (Num) Greater ¶
Greater returns true if the value represented by n is > other
func (Num) GreaterEqual ¶
GreaterEqual returns true if the value represented by n is >= other
func (Num) HighBits ¶
HighBits returns the high bits of the two's complement representation of the number.
func (Num) IncreaseScaleBy ¶
IncreaseScaleBy returns a new decimal128.Num with the value scaled up by the desired amount. Must be 0 <= increase <= 38. Any data loss from scaling is ignored. If you wish to prevent data loss, use Rescale which will return an error if data loss is detected.
func (Num) Less ¶
Less returns true if the value represented by n is < other
func (Num) LessEqual ¶
LessEqual returns true if the value represented by n is <= other
func (Num) LowBits ¶
LowBits returns the low bits of the two's complement representation of the number.
func (Num) Mul ¶
func (Num) Negate ¶
Negate returns a copy of this Decimal128 value but with the sign negated
func (Num) Pow ¶
func (Num) ReduceScaleBy ¶
ReduceScaleBy returns a new decimal128.Num with the value scaled down by the desired amount and, if 'round' is true, the value will be rounded accordingly. Assumes 0 <= reduce <= 38. Any data loss from scaling is ignored. If you wish to prevent data loss, use Rescale which will return an error if data loss is detected.
func (Num) Rescale ¶
Rescale returns a new decimal128.Num with the value updated assuming the current value is scaled to originalScale with the new value scaled to newScale. If rescaling this way would cause data loss, an error is returned instead.
func (Num) Sign ¶
Sign returns:
-1 if x < 0
0 if x == 0
+1 if x > 0
func (Num) Sub ¶
func (Num) ToBigFloat ¶
func (Num) ToFloat32 ¶
ToFloat32 returns a float32 value representative of this decimal128.Num, but with the given scale.
func (Num) ToFloat64 ¶
ToFloat64 returns a float64 value representative of this decimal128.Num, but with the given scale.
func (Num) ToString ¶
Source Files ¶
- Version
- v18.3.0 (latest)
- Published
- May 6, 2025
- Platform
- linux/amd64
- Imports
- 6 packages
- Last checked
- 3 days ago –
Tools for package owners.