@Override
 public IComplexNumber divi(Number v, IComplexNumber result) {
   if (this == result) {
     set(real() / v.doubleValue(), imag());
   } else {
     result.set(result.realComponent().doubleValue() / v.doubleValue(), imaginaryComponent());
   }
   return result;
 }
 /**
  * Multiply two complex numbers, inplace
  *
  * @param c
  * @param result
  */
 @Override
 public IComplexNumber muli(IComplexNumber c, IComplexNumber result) {
   double newR =
       real() * c.realComponent().doubleValue() - imag() * c.imaginaryComponent().doubleValue();
   double newI =
       real() * c.imaginaryComponent().doubleValue() + imag() * c.realComponent().doubleValue();
   result.set(newR, newI);
   return result;
 }
 /**
  * Divide two complex numbers, in-place
  *
  * @param c
  * @param result
  */
 @Override
 public IComplexNumber divi(IComplexNumber c, IComplexNumber result) {
   double d =
       c.realComponent().doubleValue() * c.realComponent().doubleValue()
           + c.imaginaryComponent().doubleValue() * c.imaginaryComponent().doubleValue();
   double newR =
       (real() * c.realComponent().doubleValue() + imag() * c.imaginaryComponent().doubleValue())
           / d;
   double newI =
       (imag() * c.realComponent().doubleValue() - real() * c.imaginaryComponent().doubleValue())
           / d;
   result.set(newR, newI);
   return result;
 }
 /**
  * Add two complex numbers in-place
  *
  * @param c
  * @param result
  */
 @Override
 public IComplexNumber addi(IComplexNumber c, IComplexNumber result) {
   if (this == result) {
     set(
         real() + c.realComponent().doubleValue(),
         imag() + result.imaginaryComponent().doubleValue());
   } else {
     result.set(
         result.realComponent().doubleValue() + c.realComponent().doubleValue(),
         result.imaginaryComponent().doubleValue() + c.imaginaryComponent().doubleValue());
   }
   return this;
 }