\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -5.646136584525686015243781694282027335309 \cdot 10^{138} \lor \neg \left(z \le 8.697575599925424886021160018753896601857 \cdot 10^{81}\right):\\
\;\;\;\;\frac{\frac{x \cdot 2}{z}}{y - t}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 2}{z \cdot \left(y - t\right)}\\
\end{array}double f(double x, double y, double z, double t) {
double r617590 = x;
double r617591 = 2.0;
double r617592 = r617590 * r617591;
double r617593 = y;
double r617594 = z;
double r617595 = r617593 * r617594;
double r617596 = t;
double r617597 = r617596 * r617594;
double r617598 = r617595 - r617597;
double r617599 = r617592 / r617598;
return r617599;
}
double f(double x, double y, double z, double t) {
double r617600 = z;
double r617601 = -5.646136584525686e+138;
bool r617602 = r617600 <= r617601;
double r617603 = 8.697575599925425e+81;
bool r617604 = r617600 <= r617603;
double r617605 = !r617604;
bool r617606 = r617602 || r617605;
double r617607 = x;
double r617608 = 2.0;
double r617609 = r617607 * r617608;
double r617610 = r617609 / r617600;
double r617611 = y;
double r617612 = t;
double r617613 = r617611 - r617612;
double r617614 = r617610 / r617613;
double r617615 = r617600 * r617613;
double r617616 = r617609 / r617615;
double r617617 = r617606 ? r617614 : r617616;
return r617617;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.7 |
|---|---|
| Target | 2.2 |
| Herbie | 3.0 |
if z < -5.646136584525686e+138 or 8.697575599925425e+81 < z Initial program 13.3
Simplified10.5
rmApplied associate-/r*2.7
if -5.646136584525686e+138 < z < 8.697575599925425e+81Initial program 3.3
Simplified3.1
Final simplification3.0
herbie shell --seed 2019350 +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))))