//
func (x *Float) Sign() int {
if debugFloat {
- validate(x)
+ x.validate()
}
if len(x.mant) == 0 && x.exp != infExp {
return 0
// mantissa value.
func (x *Float) MantExp(mant *Float) (exp int) {
if debugFloat {
- validate(x)
+ x.validate()
}
if len(x.mant) != 0 {
exp = int(x.exp)
// is set to exp.
func (z *Float) SetMantExp(mant *Float, exp int) *Float {
if debugFloat {
- validate(z)
- validate(mant)
+ z.validate()
+ mant.validate()
}
z.Copy(mant)
if len(z.mant) == 0 {
// ±Inf and NaN values are not integers.
func (x *Float) IsInt() bool {
if debugFloat {
- validate(x)
+ x.validate()
}
// pick off easy cases
if x.exp <= 0 {
}
// debugging support
-func validate(x *Float) {
+func (x *Float) validate() {
if !debugFloat {
// avoid performance bugs
panic("validate called but debugFloat is not set")
// calling round.
func (z *Float) round(sbit uint) {
if debugFloat {
- validate(z)
+ z.validate()
}
z.acc = Exact
}
if debugFloat {
- validate(z)
+ z.validate()
}
return
// exact (not rounded) result.
func (z *Float) Set(x *Float) *Float {
if debugFloat {
- validate(x)
+ x.validate()
}
z.acc = Exact
if z != x {
// x are the same.
func (z *Float) Copy(x *Float) *Float {
if debugFloat {
- validate(x)
+ x.validate()
}
if z != x {
z.prec = x.prec
// for x > math.MaxUint64, and (0, Undef) for NaNs.
func (x *Float) Uint64() (uint64, Accuracy) {
if debugFloat {
- validate(x)
+ x.validate()
}
// special cases
// (math.MaxInt64, Below) for x > math.MaxInt64, and (0, Undef) for NaNs.
func (x *Float) Int64() (int64, Accuracy) {
if debugFloat {
- validate(x)
+ x.validate()
}
// special cases
// BUG(gri) Float.Float64 doesn't handle exponent overflow.
func (x *Float) Float64() (float64, Accuracy) {
if debugFloat {
- validate(x)
+ x.validate()
}
// special cases
// the result in z instead of allocating a new Int.
func (x *Float) Int(z *Int) (*Int, Accuracy) {
if debugFloat {
- validate(x)
+ x.validate()
}
if z == nil {
// the result in z instead of allocating a new Rat.
func (x *Float) Rat(z *Rat) (*Rat, Accuracy) {
if debugFloat {
- validate(x)
+ x.validate()
}
if z == nil {
// BUG(gri) When rounding ToNegativeInf, the sign of Float values rounded to 0 is incorrect.
func (z *Float) Add(x, y *Float) *Float {
if debugFloat {
- validate(x)
- validate(y)
+ x.validate()
+ y.validate()
}
if z.prec == 0 {
// BUG(gri) Float.Sub returns NaN if an operand is Inf.
func (z *Float) Sub(x, y *Float) *Float {
if debugFloat {
- validate(x)
- validate(y)
+ x.validate()
+ y.validate()
}
if z.prec == 0 {
// BUG(gri) Float.Mul returns NaN if an operand is Inf.
func (z *Float) Mul(x, y *Float) *Float {
if debugFloat {
- validate(x)
- validate(y)
+ x.validate()
+ y.validate()
}
if z.prec == 0 {
// BUG(gri) Float.Quo returns NaN if an operand is Inf.
func (z *Float) Quo(x, y *Float) *Float {
if debugFloat {
- validate(x)
- validate(y)
+ x.validate()
+ y.validate()
}
if z.prec == 0 {
// BUG(gri) Float.Cmp does not implement comparing of NaNs.
func (x *Float) Cmp(y *Float) int {
if debugFloat {
- validate(x)
- validate(y)
+ x.validate()
+ y.validate()
}
mx := x.ord()