// absInt returns the absolute value of v as a *big.Int. // v must be a numeric value. func absInt(v exact.Value) *big.Int { // compute big-endian representation of v b := exact.Bytes(v) // little-endian for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 { b[i], b[j] = b[j], b[i] } return new(big.Int).SetBytes(b) }
// ufloat writes abs(x) in form of a binary exponent // followed by its mantissa bytes; x must be != 0. func (p *exporter) ufloat(x exact.Value) { mant := exact.Bytes(x) exp8 := -1 for i, b := range mant { if b != 0 { exp8 = i break } } if exp8 < 0 { panic(fmt.Sprintf("%s has no mantissa", x)) } p.int(exp8 * 8) p.bytes(mant[exp8:]) }