\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -5.921093048146768407671721348483596322734 \cdot 10^{65}:\\
\;\;\;\;\frac{\frac{2}{\frac{z}{x}}}{y - t}\\
\mathbf{elif}\;z \le 1244408611296900.5:\\
\;\;\;\;\frac{2 \cdot x}{\left(y - t\right) \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{2}{\frac{z}{x}}}{y - t}\\
\end{array}double f(double x, double y, double z, double t) {
double r26099430 = x;
double r26099431 = 2.0;
double r26099432 = r26099430 * r26099431;
double r26099433 = y;
double r26099434 = z;
double r26099435 = r26099433 * r26099434;
double r26099436 = t;
double r26099437 = r26099436 * r26099434;
double r26099438 = r26099435 - r26099437;
double r26099439 = r26099432 / r26099438;
return r26099439;
}
double f(double x, double y, double z, double t) {
double r26099440 = z;
double r26099441 = -5.921093048146768e+65;
bool r26099442 = r26099440 <= r26099441;
double r26099443 = 2.0;
double r26099444 = x;
double r26099445 = r26099440 / r26099444;
double r26099446 = r26099443 / r26099445;
double r26099447 = y;
double r26099448 = t;
double r26099449 = r26099447 - r26099448;
double r26099450 = r26099446 / r26099449;
double r26099451 = 1244408611296900.5;
bool r26099452 = r26099440 <= r26099451;
double r26099453 = r26099443 * r26099444;
double r26099454 = r26099449 * r26099440;
double r26099455 = r26099453 / r26099454;
double r26099456 = r26099452 ? r26099455 : r26099450;
double r26099457 = r26099442 ? r26099450 : r26099456;
return r26099457;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.0 |
|---|---|
| Target | 2.0 |
| Herbie | 2.2 |
if z < -5.921093048146768e+65 or 1244408611296900.5 < z Initial program 12.2
Simplified2.0
if -5.921093048146768e+65 < z < 1244408611296900.5Initial program 2.3
Simplified9.3
rmApplied associate-/r/9.3
rmApplied associate-*l/9.2
Applied associate-/l/2.3
Final simplification2.2
herbie shell --seed 2019168 +o rules:numerics
(FPCore (x y z t)
:name "Linear.Projection:infinitePerspective from linear-1.19.1.3, A"
:herbie-target
(if (< (/ (* x 2.0) (- (* y z) (* t z))) -2.559141628295061e-13) (* (/ x (* (- y t) z)) 2.0) (if (< (/ (* x 2.0) (- (* y z) (* t z))) 1.045027827330126e-269) (/ (* (/ x z) 2.0) (- y t)) (* (/ x (* (- y t) z)) 2.0)))
(/ (* x 2.0) (- (* y z) (* t z))))