(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))))
(t_1 (+ (/ b d) (* c (/ a (pow d 2.0))))))
(if (<= d -3.6e+28)
t_1
(if (<= d -3.1e-156)
t_0
(if (<= d 1.65e-143)
(+ (/ a c) (/ b (/ (pow c 2.0) d)))
(if (<= d 4.2e+87) t_0 t_1))))))
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 t_1 = (b / d) + (c * (a / pow(d, 2.0)));
double tmp;
if (d <= -3.6e+28) {
tmp = t_1;
} else if (d <= -3.1e-156) {
tmp = t_0;
} else if (d <= 1.65e-143) {
tmp = (a / c) + (b / (pow(c, 2.0) / d));
} else if (d <= 4.2e+87) {
tmp = t_0;
} else {
tmp = t_1;
}
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) :: t_1
real(8) :: tmp
t_0 = ((a * c) + (b * d)) / ((c * c) + (d * d))
t_1 = (b / d) + (c * (a / (d ** 2.0d0)))
if (d <= (-3.6d+28)) then
tmp = t_1
else if (d <= (-3.1d-156)) then
tmp = t_0
else if (d <= 1.65d-143) then
tmp = (a / c) + (b / ((c ** 2.0d0) / d))
else if (d <= 4.2d+87) then
tmp = t_0
else
tmp = t_1
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 t_1 = (b / d) + (c * (a / Math.pow(d, 2.0)));
double tmp;
if (d <= -3.6e+28) {
tmp = t_1;
} else if (d <= -3.1e-156) {
tmp = t_0;
} else if (d <= 1.65e-143) {
tmp = (a / c) + (b / (Math.pow(c, 2.0) / d));
} else if (d <= 4.2e+87) {
tmp = t_0;
} else {
tmp = t_1;
}
return tmp;
}
herbie shell --seed 2023073
(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))))