(FPCore (a b c d)
:precision binary64
(/ (+ (* a c) (* b d)) (+ (* c c) (* d d))))
↓
(FPCore (a b c d)
:precision binary64
(let* ((t_0 (/ (+ (* a c) (* b d)) (+ (* c c) (* d d)))))
(if (<= d -4.7e+123)
(/ b d)
(if (<= d -4e-28)
t_0
(if (<= d 3.4e-101)
(+ (/ a c) (/ (* d b) (pow c 2.0)))
(if (<= d 1.7e+109) t_0 (/ b d)))))))
double code(double a, double b, double c, double d) {
return ((a * c) + (b * d)) / ((c * c) + (d * d));
}
↓
double code(double a, double b, double c, double d) {
double t_0 = ((a * c) + (b * d)) / ((c * c) + (d * d));
double tmp;
if (d <= -4.7e+123) {
tmp = b / d;
} else if (d <= -4e-28) {
tmp = t_0;
} else if (d <= 3.4e-101) {
tmp = (a / c) + ((d * b) / pow(c, 2.0));
} else if (d <= 1.7e+109) {
tmp = t_0;
} else {
tmp = b / d;
}
return tmp;
}
real(8) function code(a, b, c, d)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8), intent (in) :: c
real(8), intent (in) :: d
code = ((a * c) + (b * d)) / ((c * c) + (d * d))
end function
↓
real(8) function code(a, b, c, d)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8), intent (in) :: c
real(8), intent (in) :: d
real(8) :: t_0
real(8) :: tmp
t_0 = ((a * c) + (b * d)) / ((c * c) + (d * d))
if (d <= (-4.7d+123)) then
tmp = b / d
else if (d <= (-4d-28)) then
tmp = t_0
else if (d <= 3.4d-101) then
tmp = (a / c) + ((d * b) / (c ** 2.0d0))
else if (d <= 1.7d+109) then
tmp = t_0
else
tmp = b / d
end if
code = tmp
end function
public static double code(double a, double b, double c, double d) {
return ((a * c) + (b * d)) / ((c * c) + (d * d));
}
↓
public static double code(double a, double b, double c, double d) {
double t_0 = ((a * c) + (b * d)) / ((c * c) + (d * d));
double tmp;
if (d <= -4.7e+123) {
tmp = b / d;
} else if (d <= -4e-28) {
tmp = t_0;
} else if (d <= 3.4e-101) {
tmp = (a / c) + ((d * b) / Math.pow(c, 2.0));
} else if (d <= 1.7e+109) {
tmp = t_0;
} else {
tmp = b / d;
}
return tmp;
}
herbie shell --seed 2023077
(FPCore (a b c d)
:name "Complex division, real part"
:precision binary64
:herbie-target
(if (< (fabs d) (fabs c)) (/ (+ a (* b (/ d c))) (+ c (* d (/ d c)))) (/ (+ b (* a (/ c d))) (+ d (* c (/ c d)))))
(/ (+ (* a c) (* b d)) (+ (* c c) (* d d))))