\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;x \le -1.66531436768127368 \cdot 10^{-57} \lor \neg \left(x \le 3.501200984228306 \cdot 10^{-154}\right):\\
\;\;\;\;\frac{\frac{x}{y - t}}{\frac{z}{2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\left(y - t\right) \cdot \frac{z}{2}}\\
\end{array}double f(double x, double y, double z, double t) {
double r434138 = x;
double r434139 = 2.0;
double r434140 = r434138 * r434139;
double r434141 = y;
double r434142 = z;
double r434143 = r434141 * r434142;
double r434144 = t;
double r434145 = r434144 * r434142;
double r434146 = r434143 - r434145;
double r434147 = r434140 / r434146;
return r434147;
}
double f(double x, double y, double z, double t) {
double r434148 = x;
double r434149 = -1.6653143676812737e-57;
bool r434150 = r434148 <= r434149;
double r434151 = 3.501200984228306e-154;
bool r434152 = r434148 <= r434151;
double r434153 = !r434152;
bool r434154 = r434150 || r434153;
double r434155 = y;
double r434156 = t;
double r434157 = r434155 - r434156;
double r434158 = r434148 / r434157;
double r434159 = z;
double r434160 = 2.0;
double r434161 = r434159 / r434160;
double r434162 = r434158 / r434161;
double r434163 = r434157 * r434161;
double r434164 = r434148 / r434163;
double r434165 = r434154 ? r434162 : r434164;
return r434165;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.8 |
|---|---|
| Target | 2.0 |
| Herbie | 2.7 |
if x < -1.6653143676812737e-57 or 3.501200984228306e-154 < x Initial program 8.6
Simplified7.8
rmApplied associate-/l*7.7
Simplified7.7
rmApplied associate-/r*3.0
if -1.6653143676812737e-57 < x < 3.501200984228306e-154Initial program 3.5
Simplified2.1
rmApplied associate-/l*2.1
Simplified2.1
Final simplification2.7
herbie shell --seed 2020046
(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))))