\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;y \le -2.977769295145242659502504364676573176105 \cdot 10^{-72}:\\
\;\;\;\;\left(t \cdot x\right) \cdot y + t \cdot \left(\left(-z\right) \cdot y\right)\\
\mathbf{elif}\;y \le 1.329938031514973749605620809522139604149 \cdot 10^{99}:\\
\;\;\;\;\left(\sqrt[3]{t \cdot \left(x \cdot y\right)} \cdot \sqrt[3]{t \cdot \left(x \cdot y\right)}\right) \cdot \sqrt[3]{t \cdot \left(x \cdot y\right)} + t \cdot \left(\left(-z\right) \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;\left(t \cdot y\right) \cdot \left(x - z\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r774441 = x;
double r774442 = y;
double r774443 = r774441 * r774442;
double r774444 = z;
double r774445 = r774444 * r774442;
double r774446 = r774443 - r774445;
double r774447 = t;
double r774448 = r774446 * r774447;
return r774448;
}
double f(double x, double y, double z, double t) {
double r774449 = y;
double r774450 = -2.9777692951452427e-72;
bool r774451 = r774449 <= r774450;
double r774452 = t;
double r774453 = x;
double r774454 = r774452 * r774453;
double r774455 = r774454 * r774449;
double r774456 = z;
double r774457 = -r774456;
double r774458 = r774457 * r774449;
double r774459 = r774452 * r774458;
double r774460 = r774455 + r774459;
double r774461 = 1.3299380315149737e+99;
bool r774462 = r774449 <= r774461;
double r774463 = r774453 * r774449;
double r774464 = r774452 * r774463;
double r774465 = cbrt(r774464);
double r774466 = r774465 * r774465;
double r774467 = r774466 * r774465;
double r774468 = r774467 + r774459;
double r774469 = r774452 * r774449;
double r774470 = r774453 - r774456;
double r774471 = r774469 * r774470;
double r774472 = r774462 ? r774468 : r774471;
double r774473 = r774451 ? r774460 : r774472;
return r774473;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.0 |
|---|---|
| Target | 3.0 |
| Herbie | 4.5 |
if y < -2.9777692951452427e-72Initial program 11.5
Simplified11.5
rmApplied sub-neg11.5
Applied distribute-lft-in11.5
Applied distribute-lft-in11.5
Simplified11.5
Simplified11.5
rmApplied associate-*r*7.7
if -2.9777692951452427e-72 < y < 1.3299380315149737e+99Initial program 2.7
Simplified2.7
rmApplied sub-neg2.7
Applied distribute-lft-in2.7
Applied distribute-lft-in2.7
Simplified2.7
Simplified2.7
rmApplied add-cube-cbrt3.1
if 1.3299380315149737e+99 < y Initial program 21.5
Simplified21.5
rmApplied associate-*r*5.2
Final simplification4.5
herbie shell --seed 2019353
(FPCore (x y z t)
:name "Linear.Projection:inverseInfinitePerspective from linear-1.19.1.3"
:precision binary64
:herbie-target
(if (< t -9.231879582886777e-80) (* (* y t) (- x z)) (if (< t 2.543067051564877e+83) (* y (* t (- x z))) (* (* y (- x z)) t)))
(* (- (* x y) (* z y)) t))