\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;x \cdot y - z \cdot y = -\infty:\\
\;\;\;\;\left(x - z\right) \cdot \left(y \cdot t\right)\\
\mathbf{elif}\;x \cdot y - z \cdot y \le 1.2122805582373037 \cdot 10^{+206}:\\
\;\;\;\;t \cdot \left(x \cdot y - z \cdot y\right)\\
\mathbf{else}:\\
\;\;\;\;\left(t \cdot \left(x - z\right)\right) \cdot y\\
\end{array}double f(double x, double y, double z, double t) {
double r24680406 = x;
double r24680407 = y;
double r24680408 = r24680406 * r24680407;
double r24680409 = z;
double r24680410 = r24680409 * r24680407;
double r24680411 = r24680408 - r24680410;
double r24680412 = t;
double r24680413 = r24680411 * r24680412;
return r24680413;
}
double f(double x, double y, double z, double t) {
double r24680414 = x;
double r24680415 = y;
double r24680416 = r24680414 * r24680415;
double r24680417 = z;
double r24680418 = r24680417 * r24680415;
double r24680419 = r24680416 - r24680418;
double r24680420 = -inf.0;
bool r24680421 = r24680419 <= r24680420;
double r24680422 = r24680414 - r24680417;
double r24680423 = t;
double r24680424 = r24680415 * r24680423;
double r24680425 = r24680422 * r24680424;
double r24680426 = 1.2122805582373037e+206;
bool r24680427 = r24680419 <= r24680426;
double r24680428 = r24680423 * r24680419;
double r24680429 = r24680423 * r24680422;
double r24680430 = r24680429 * r24680415;
double r24680431 = r24680427 ? r24680428 : r24680430;
double r24680432 = r24680421 ? r24680425 : r24680431;
return r24680432;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.7 |
|---|---|
| Target | 3.1 |
| Herbie | 1.4 |
if (- (* x y) (* z y)) < -inf.0Initial program 60.0
Simplified0.2
if -inf.0 < (- (* x y) (* z y)) < 1.2122805582373037e+206Initial program 1.5
if 1.2122805582373037e+206 < (- (* x y) (* z y)) Initial program 28.8
Simplified0.8
rmApplied associate-*r*0.9
Final simplification1.4
herbie shell --seed 2019165
(FPCore (x y z t)
:name "Linear.Projection:inverseInfinitePerspective from linear-1.19.1.3"
: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))