x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;t \le -8.363664958439672667278554160764100153889 \cdot 10^{69} \lor \neg \left(t \le 7.486542709900388243398285213925344255536 \cdot 10^{-169}\right):\\
\;\;\;\;\left(z - x\right) \cdot \frac{y}{t} + x\\
\mathbf{else}:\\
\;\;\;\;\frac{y \cdot \left(z - x\right)}{t} + x\\
\end{array}double f(double x, double y, double z, double t) {
double r269358 = x;
double r269359 = y;
double r269360 = z;
double r269361 = r269360 - r269358;
double r269362 = r269359 * r269361;
double r269363 = t;
double r269364 = r269362 / r269363;
double r269365 = r269358 + r269364;
return r269365;
}
double f(double x, double y, double z, double t) {
double r269366 = t;
double r269367 = -8.363664958439673e+69;
bool r269368 = r269366 <= r269367;
double r269369 = 7.486542709900388e-169;
bool r269370 = r269366 <= r269369;
double r269371 = !r269370;
bool r269372 = r269368 || r269371;
double r269373 = z;
double r269374 = x;
double r269375 = r269373 - r269374;
double r269376 = y;
double r269377 = r269376 / r269366;
double r269378 = r269375 * r269377;
double r269379 = r269378 + r269374;
double r269380 = r269376 * r269375;
double r269381 = r269380 / r269366;
double r269382 = r269381 + r269374;
double r269383 = r269372 ? r269379 : r269382;
return r269383;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.3 |
|---|---|
| Target | 2.0 |
| Herbie | 1.7 |
if t < -8.363664958439673e+69 or 7.486542709900388e-169 < t Initial program 8.1
rmApplied associate-/l*2.4
rmApplied *-un-lft-identity2.4
Applied *-un-lft-identity2.4
Applied distribute-lft-out2.4
Simplified1.3
if -8.363664958439673e+69 < t < 7.486542709900388e-169Initial program 2.7
Final simplification1.7
herbie shell --seed 2019179
(FPCore (x y z t)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, D"
:herbie-target
(- x (+ (* x (/ y t)) (* (- z) (/ y t))))
(+ x (/ (* y (- z x)) t)))