\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;y \cdot z - t \cdot z = -\infty:\\
\;\;\;\;\frac{2}{y - t} \cdot \frac{x}{z}\\
\mathbf{elif}\;y \cdot z - t \cdot z \le 2.166521247594354925726439343625696917212 \cdot 10^{205}:\\
\;\;\;\;\frac{x \cdot 2}{y \cdot z - t \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 2}{y - t} \cdot \frac{1}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r349550 = x;
double r349551 = 2.0;
double r349552 = r349550 * r349551;
double r349553 = y;
double r349554 = z;
double r349555 = r349553 * r349554;
double r349556 = t;
double r349557 = r349556 * r349554;
double r349558 = r349555 - r349557;
double r349559 = r349552 / r349558;
return r349559;
}
double f(double x, double y, double z, double t) {
double r349560 = y;
double r349561 = z;
double r349562 = r349560 * r349561;
double r349563 = t;
double r349564 = r349563 * r349561;
double r349565 = r349562 - r349564;
double r349566 = -inf.0;
bool r349567 = r349565 <= r349566;
double r349568 = 2.0;
double r349569 = r349560 - r349563;
double r349570 = r349568 / r349569;
double r349571 = x;
double r349572 = r349571 / r349561;
double r349573 = r349570 * r349572;
double r349574 = 2.166521247594355e+205;
bool r349575 = r349565 <= r349574;
double r349576 = r349571 * r349568;
double r349577 = r349576 / r349565;
double r349578 = r349576 / r349569;
double r349579 = 1.0;
double r349580 = r349579 / r349561;
double r349581 = r349578 * r349580;
double r349582 = r349575 ? r349577 : r349581;
double r349583 = r349567 ? r349573 : r349582;
return r349583;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.7 |
|---|---|
| Target | 2.2 |
| Herbie | 1.3 |
if (- (* y z) (* t z)) < -inf.0Initial program 21.0
Simplified0.8
rmApplied *-un-lft-identity0.8
Applied times-frac0.2
rmApplied *-un-lft-identity0.2
Applied *-un-lft-identity0.2
Applied times-frac0.2
Applied associate-*r*0.2
Simplified0.1
if -inf.0 < (- (* y z) (* t z)) < 2.166521247594355e+205Initial program 1.7
if 2.166521247594355e+205 < (- (* y z) (* t z)) Initial program 17.3
Simplified1.5
rmApplied *-un-lft-identity1.5
Applied times-frac0.8
rmApplied div-inv0.8
Applied add-cube-cbrt0.8
Applied times-frac0.7
Applied associate-*l*0.5
Simplified0.5
Final simplification1.3
herbie shell --seed 2019179 +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))))