(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 (<= c -5.3e+101)
(/ a c)
(if (<= c -3.75e-76)
t_0
(if (<= c 3.5e-90)
(+ (/ b d) (/ (* c a) (pow d 2.0)))
(if (<= c 1.7e+124) t_0 (/ a c)))))))
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 (c <= -5.3e+101) {
tmp = a / c;
} else if (c <= -3.75e-76) {
tmp = t_0;
} else if (c <= 3.5e-90) {
tmp = (b / d) + ((c * a) / pow(d, 2.0));
} else if (c <= 1.7e+124) {
tmp = t_0;
} else {
tmp = a / c;
}
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 (c <= (-5.3d+101)) then
tmp = a / c
else if (c <= (-3.75d-76)) then
tmp = t_0
else if (c <= 3.5d-90) then
tmp = (b / d) + ((c * a) / (d ** 2.0d0))
else if (c <= 1.7d+124) then
tmp = t_0
else
tmp = a / c
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 (c <= -5.3e+101) {
tmp = a / c;
} else if (c <= -3.75e-76) {
tmp = t_0;
} else if (c <= 3.5e-90) {
tmp = (b / d) + ((c * a) / Math.pow(d, 2.0));
} else if (c <= 1.7e+124) {
tmp = t_0;
} else {
tmp = a / c;
}
return tmp;
}
herbie shell --seed 2023090
(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))))