final double c = z.getReal();
final double d = z.getImaginary();
if (Math.abs(c) > Math.abs(d)) {
final double dOverC = d / c;
final double denom = c + d * dOverC;
return new ComplexNumber(x / denom, -x * dOverC / denom);
}
final double cOverD = c / d;
final double denom = c * cOverD + d;
return new ComplexNumber(x * cOverD / denom, -x / denom);
}