(FPCore (x y z t) :precision binary64 (* (- (* x y) (* z y)) t))
↓
(FPCore (x y z t)
:precision binary64
(let* ((t_1 (- (* x y) (* y z))))
(if (<= t_1 -2e+229)
(* (- x z) (* y t))
(if (<= t_1 -5e-232)
(* t_1 t)
(if (<= t_1 1e-180)
(* y (- (* x t) (* z t)))
(if (<= t_1 4e+177) (* t (* y (- x z))) (* y (* (- x z) t))))))))
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
code = ((x * y) - (z * y)) * t
end function
↓
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
real(8) :: t_1
real(8) :: tmp
t_1 = (x * y) - (y * z)
if (t_1 <= (-2d+229)) then
tmp = (x - z) * (y * t)
else if (t_1 <= (-5d-232)) then
tmp = t_1 * t
else if (t_1 <= 1d-180) then
tmp = y * ((x * t) - (z * t))
else if (t_1 <= 4d+177) then
tmp = t * (y * (x - z))
else
tmp = y * ((x - z) * t)
end if
code = tmp
end function
public static double code(double x, double y, double z, double t) {
return ((x * y) - (z * y)) * t;
}
↓
public static double code(double x, double y, double z, double t) {
double t_1 = (x * y) - (y * z);
double tmp;
if (t_1 <= -2e+229) {
tmp = (x - z) * (y * t);
} else if (t_1 <= -5e-232) {
tmp = t_1 * t;
} else if (t_1 <= 1e-180) {
tmp = y * ((x * t) - (z * t));
} else if (t_1 <= 4e+177) {
tmp = t * (y * (x - z));
} else {
tmp = y * ((x - z) * t);
}
return tmp;
}
def code(x, y, z, t):
return ((x * y) - (z * y)) * t
herbie shell --seed 2023023
(FPCore (x y z t)
:name "Linear.Projection:inverseInfinitePerspective from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< t -9.231879582886777e-80) (* (* y t) (- x z)) (if (< t 2.543067051564877e+83) (* y (* t (- x z))) (* (* y (- x z)) t)))
(* (- (* x y) (* z y)) t))