(FPCore (a b c d)
:precision binary64
(/ (- (* b c) (* a d)) (+ (* c c) (* d d))))
↓
(FPCore (a b c d)
:precision binary64
(let* ((t_0 (- (/ a d))) (t_1 (/ (- (* b c) (* a d)) (+ (* c c) (* d d)))))
(if (<= d -1.02e+145)
t_0
(if (<= d -1.25e-158)
t_1
(if (<= d 2.5e-119) (/ b c) (if (<= d 4.2e+143) t_1 t_0))))))
double code(double a, double b, double c, double d) {
return ((b * c) - (a * d)) / ((c * c) + (d * d));
}
↓
double code(double a, double b, double c, double d) {
double t_0 = -(a / d);
double t_1 = ((b * c) - (a * d)) / ((c * c) + (d * d));
double tmp;
if (d <= -1.02e+145) {
tmp = t_0;
} else if (d <= -1.25e-158) {
tmp = t_1;
} else if (d <= 2.5e-119) {
tmp = b / c;
} else if (d <= 4.2e+143) {
tmp = t_1;
} else {
tmp = t_0;
}
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 = ((b * c) - (a * 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 / d)
t_1 = ((b * c) - (a * d)) / ((c * c) + (d * d))
if (d <= (-1.02d+145)) then
tmp = t_0
else if (d <= (-1.25d-158)) then
tmp = t_1
else if (d <= 2.5d-119) then
tmp = b / c
else if (d <= 4.2d+143) then
tmp = t_1
else
tmp = t_0
end if
code = tmp
end function
public static double code(double a, double b, double c, double d) {
return ((b * c) - (a * d)) / ((c * c) + (d * d));
}
↓
public static double code(double a, double b, double c, double d) {
double t_0 = -(a / d);
double t_1 = ((b * c) - (a * d)) / ((c * c) + (d * d));
double tmp;
if (d <= -1.02e+145) {
tmp = t_0;
} else if (d <= -1.25e-158) {
tmp = t_1;
} else if (d <= 2.5e-119) {
tmp = b / c;
} else if (d <= 4.2e+143) {
tmp = t_1;
} else {
tmp = t_0;
}
return tmp;
}
def code(a, b, c, d):
return ((b * c) - (a * d)) / ((c * c) + (d * d))
↓
def code(a, b, c, d):
t_0 = -(a / d)
t_1 = ((b * c) - (a * d)) / ((c * c) + (d * d))
tmp = 0
if d <= -1.02e+145:
tmp = t_0
elif d <= -1.25e-158:
tmp = t_1
elif d <= 2.5e-119:
tmp = b / c
elif d <= 4.2e+143:
tmp = t_1
else:
tmp = t_0
return tmp
function code(a, b, c, d)
return Float64(Float64(Float64(b * c) - Float64(a * d)) / Float64(Float64(c * c) + Float64(d * d)))
end
herbie shell --seed 2023104
(FPCore (a b c d)
:name "Complex division, imag part"
:precision binary64
:herbie-target
(if (< (fabs d) (fabs c)) (/ (- b (* a (/ d c))) (+ c (* d (/ d c)))) (/ (+ (- a) (* b (/ c d))) (+ d (* c (/ c d)))))
(/ (- (* b c) (* a d)) (+ (* c c) (* d d))))