\frac{x \cdot 2}{y \cdot z - t \cdot z}\begin{array}{l}
\mathbf{if}\;y \cdot z - t \cdot z \le 0.0:\\
\;\;\;\;\frac{\left(x \cdot 2\right) \cdot \left(\sqrt[3]{1} \cdot \sqrt[3]{\frac{1}{z}}\right)}{\left(\sqrt[3]{y - t} \cdot \sqrt[3]{y - t}\right) \cdot \sqrt[3]{z}} \cdot \frac{\sqrt[3]{\frac{1}{z}}}{\sqrt[3]{y - t}}\\
\mathbf{elif}\;y \cdot z - t \cdot z \le 5.060468299900743345631957103791187978052 \cdot 10^{246}:\\
\;\;\;\;\frac{x \cdot 2}{y \cdot z - t \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 2}{z} \cdot \frac{1}{y - t}\\
\end{array}double f(double x, double y, double z, double t) {
double r406300 = x;
double r406301 = 2.0;
double r406302 = r406300 * r406301;
double r406303 = y;
double r406304 = z;
double r406305 = r406303 * r406304;
double r406306 = t;
double r406307 = r406306 * r406304;
double r406308 = r406305 - r406307;
double r406309 = r406302 / r406308;
return r406309;
}
double f(double x, double y, double z, double t) {
double r406310 = y;
double r406311 = z;
double r406312 = r406310 * r406311;
double r406313 = t;
double r406314 = r406313 * r406311;
double r406315 = r406312 - r406314;
double r406316 = 0.0;
bool r406317 = r406315 <= r406316;
double r406318 = x;
double r406319 = 2.0;
double r406320 = r406318 * r406319;
double r406321 = 1.0;
double r406322 = cbrt(r406321);
double r406323 = r406321 / r406311;
double r406324 = cbrt(r406323);
double r406325 = r406322 * r406324;
double r406326 = r406320 * r406325;
double r406327 = r406310 - r406313;
double r406328 = cbrt(r406327);
double r406329 = r406328 * r406328;
double r406330 = cbrt(r406311);
double r406331 = r406329 * r406330;
double r406332 = r406326 / r406331;
double r406333 = r406324 / r406328;
double r406334 = r406332 * r406333;
double r406335 = 5.060468299900743e+246;
bool r406336 = r406315 <= r406335;
double r406337 = r406320 / r406315;
double r406338 = r406320 / r406311;
double r406339 = r406321 / r406327;
double r406340 = r406338 * r406339;
double r406341 = r406336 ? r406337 : r406340;
double r406342 = r406317 ? r406334 : r406341;
return r406342;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.6 |
|---|---|
| Target | 1.9 |
| Herbie | 1.2 |
if (- (* y z) (* t z)) < 0.0Initial program 5.6
rmApplied distribute-rgt-out--5.6
Applied associate-/r*5.6
rmApplied add-cube-cbrt6.3
Applied div-inv6.3
Applied times-frac5.0
rmApplied *-un-lft-identity5.0
Applied add-cube-cbrt5.2
Applied times-frac5.2
Applied associate-*r*4.0
Simplified3.9
rmApplied cbrt-div3.8
Applied associate-*l/3.8
Applied associate-*r/3.8
Applied associate-/l/2.2
if 0.0 < (- (* y z) (* t z)) < 5.060468299900743e+246Initial program 1.0
if 5.060468299900743e+246 < (- (* y z) (* t z)) Initial program 20.4
rmApplied distribute-rgt-out--14.2
Applied associate-/r*0.2
rmApplied div-inv0.3
Final simplification1.2
herbie shell --seed 2019294
(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.045027827330126e-269) (/ (* (/ x z) 2) (- y t)) (* (/ x (* (- y t) z)) 2)))
(/ (* x 2) (- (* y z) (* t z))))