func (z *Big) mulBig(x, y *Big) *Big { scale, ok := checked.Add32(x.scale, y.scale) if !ok { z.form = inf return z } z.mantissa.Mul(&x.mantissa, &y.mantissa) z.compact = c.Inflated z.scale = scale z.form = finite return z }
func (z *Big) mulCompact(x, y *Big) *Big { scale, ok := checked.Add32(x.scale, y.scale) if !ok { z.form = inf return z } prod, ok := checked.Mul(x.compact, y.compact) if ok { z.compact = prod } else { z.mantissa.Mul(big.NewInt(x.compact), big.NewInt(y.compact)) z.compact = c.Inflated } z.scale = scale z.form = finite return z }
func (z *Big) mulHalf(comp, non *Big) *Big { if comp.isInflated() { panic("decimal.Mul (bug) comp.isInflated() == true") } if comp.scale == non.scale { scale, ok := checked.Add32(comp.scale, non.scale) if !ok { z.form = inf return z } z.mantissa.Mul(big.NewInt(comp.compact), &non.mantissa) z.compact = c.Inflated z.scale = scale z.form = finite return z } return z.mulBig(&Big{ mantissa: *big.NewInt(comp.compact), scale: comp.scale, }, non) }