\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -7935255452.70021820068359375:\\
\;\;\;\;\frac{\frac{x}{z}}{\frac{y - t}{2}}\\
\mathbf{elif}\;z \le 1.460013591902958990208612458924325025091 \cdot 10^{-43}:\\
\;\;\;\;\frac{1}{\frac{\frac{z \cdot \left(y - t\right)}{2}}{x}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{z} \cdot \frac{x}{\frac{y - t}{2}}\\
\end{array}double f(double x, double y, double z, double t) {
double r566730 = x;
double r566731 = 2.0;
double r566732 = r566730 * r566731;
double r566733 = y;
double r566734 = z;
double r566735 = r566733 * r566734;
double r566736 = t;
double r566737 = r566736 * r566734;
double r566738 = r566735 - r566737;
double r566739 = r566732 / r566738;
return r566739;
}
double f(double x, double y, double z, double t) {
double r566740 = z;
double r566741 = -7935255452.700218;
bool r566742 = r566740 <= r566741;
double r566743 = x;
double r566744 = r566743 / r566740;
double r566745 = y;
double r566746 = t;
double r566747 = r566745 - r566746;
double r566748 = 2.0;
double r566749 = r566747 / r566748;
double r566750 = r566744 / r566749;
double r566751 = 1.460013591902959e-43;
bool r566752 = r566740 <= r566751;
double r566753 = 1.0;
double r566754 = r566740 * r566747;
double r566755 = r566754 / r566748;
double r566756 = r566755 / r566743;
double r566757 = r566753 / r566756;
double r566758 = r566753 / r566740;
double r566759 = r566743 / r566749;
double r566760 = r566758 * r566759;
double r566761 = r566752 ? r566757 : r566760;
double r566762 = r566742 ? r566750 : r566761;
return r566762;
}




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 < -7935255452.700218Initial program 11.0
Simplified9.0
rmApplied *-un-lft-identity9.0
Applied times-frac9.0
Applied associate-/r*1.6
Simplified1.6
if -7935255452.700218 < z < 1.460013591902959e-43Initial program 2.3
Simplified2.3
rmApplied clear-num2.6
if 1.460013591902959e-43 < z Initial program 10.1
Simplified8.1
rmApplied *-un-lft-identity8.1
Applied times-frac8.0
Applied *-un-lft-identity8.0
Applied times-frac2.2
Simplified2.2
Final simplification2.2
herbie shell --seed 2019356
(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))))