\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -3.2537193603035936 \cdot 10^{90}:\\
\;\;\;\;\frac{\frac{1}{z}}{\frac{\frac{y - t}{2}}{x}}\\
\mathbf{elif}\;z \le -2.1648081773488171 \cdot 10^{-305}:\\
\;\;\;\;\frac{1}{\frac{\frac{z \cdot \left(y - t\right)}{2}}{x}}\\
\mathbf{elif}\;z \le 2.3904605014014527 \cdot 10^{-230}:\\
\;\;\;\;\frac{\frac{1}{z}}{\frac{\frac{y - t}{2}}{x}}\\
\mathbf{elif}\;z \le 1.827128106419149 \cdot 10^{-51}:\\
\;\;\;\;\frac{\frac{2}{z \cdot \left(y - t\right)}}{\frac{1}{x}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{1}{z}}{\frac{\frac{y - t}{2}}{x}}\\
\end{array}double f(double x, double y, double z, double t) {
double r559527 = x;
double r559528 = 2.0;
double r559529 = r559527 * r559528;
double r559530 = y;
double r559531 = z;
double r559532 = r559530 * r559531;
double r559533 = t;
double r559534 = r559533 * r559531;
double r559535 = r559532 - r559534;
double r559536 = r559529 / r559535;
return r559536;
}
double f(double x, double y, double z, double t) {
double r559537 = z;
double r559538 = -3.2537193603035936e+90;
bool r559539 = r559537 <= r559538;
double r559540 = 1.0;
double r559541 = r559540 / r559537;
double r559542 = y;
double r559543 = t;
double r559544 = r559542 - r559543;
double r559545 = 2.0;
double r559546 = r559544 / r559545;
double r559547 = x;
double r559548 = r559546 / r559547;
double r559549 = r559541 / r559548;
double r559550 = -2.164808177348817e-305;
bool r559551 = r559537 <= r559550;
double r559552 = r559537 * r559544;
double r559553 = r559552 / r559545;
double r559554 = r559553 / r559547;
double r559555 = r559540 / r559554;
double r559556 = 2.3904605014014527e-230;
bool r559557 = r559537 <= r559556;
double r559558 = 1.827128106419149e-51;
bool r559559 = r559537 <= r559558;
double r559560 = r559545 / r559552;
double r559561 = r559540 / r559547;
double r559562 = r559560 / r559561;
double r559563 = r559559 ? r559562 : r559549;
double r559564 = r559557 ? r559549 : r559563;
double r559565 = r559551 ? r559555 : r559564;
double r559566 = r559539 ? r559549 : r559565;
return r559566;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.8 |
|---|---|
| Target | 2.1 |
| Herbie | 3.1 |
if z < -3.2537193603035936e+90 or -2.164808177348817e-305 < z < 2.3904605014014527e-230 or 1.827128106419149e-51 < z Initial program 10.2
Simplified8.2
rmApplied clear-num8.5
rmApplied *-un-lft-identity8.5
Applied *-un-lft-identity8.5
Applied times-frac8.5
Applied times-frac3.8
Applied associate-/r*3.4
Simplified3.4
if -3.2537193603035936e+90 < z < -2.164808177348817e-305Initial program 2.8
Simplified2.7
rmApplied clear-num3.1
if 2.3904605014014527e-230 < z < 1.827128106419149e-51Initial program 1.8
Simplified1.7
rmApplied clear-num2.0
rmApplied div-inv2.0
Applied associate-/r*2.2
Simplified2.2
Final simplification3.1
herbie shell --seed 2020035 +o rules:numerics
(FPCore (x y z t)
:name "Linear.Projection:infinitePerspective from linear-1.19.1.3, A"
:precision binary64
:herbie-target
(if (< (/ (* x 2) (- (* y z) (* t z))) -2.559141628295061e-13) (* (/ x (* (- y t) z)) 2) (if (< (/ (* x 2) (- (* y z) (* t z))) 1.0450278273301259e-269) (/ (* (/ x z) 2) (- y t)) (* (/ x (* (- y t) z)) 2)))
(/ (* x 2) (- (* y z) (* t z))))