@Gelox_
Code:
import lombok.Value;
import java.util.Optional;
@Value
public class ComplexNumber {
private final double value;
private final boolean complex;
public static ComplexNumber sqrtHeron(double value, int iterations) {
boolean complex = value < 0;
value = Math.abs(value);
// Choose initial value based on the Taylor series
double root = (value + 1) / 2;
// Iterate
for (int i = 0; i < iterations; i++) {
root = (root + (value / root)) / 2;
}
return new ComplexNumber(root, complex);
}
public Optional<Double> toDouble() {
if (isComplex())
return Optional.empty();
return Optional.of(value);
}
}