x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;x \le -1.324378283502526917772059572052329230767 \cdot 10^{-242} \lor \neg \left(x \le 1.042776901272343168104863784399005429514 \cdot 10^{-127}\right):\\
\;\;\;\;x + \frac{1}{\frac{\frac{t}{y}}{z - x}}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\frac{t}{z - x}}\\
\end{array}double f(double x, double y, double z, double t) {
double r350366 = x;
double r350367 = y;
double r350368 = z;
double r350369 = r350368 - r350366;
double r350370 = r350367 * r350369;
double r350371 = t;
double r350372 = r350370 / r350371;
double r350373 = r350366 + r350372;
return r350373;
}
double f(double x, double y, double z, double t) {
double r350374 = x;
double r350375 = -1.324378283502527e-242;
bool r350376 = r350374 <= r350375;
double r350377 = 1.0427769012723432e-127;
bool r350378 = r350374 <= r350377;
double r350379 = !r350378;
bool r350380 = r350376 || r350379;
double r350381 = 1.0;
double r350382 = t;
double r350383 = y;
double r350384 = r350382 / r350383;
double r350385 = z;
double r350386 = r350385 - r350374;
double r350387 = r350384 / r350386;
double r350388 = r350381 / r350387;
double r350389 = r350374 + r350388;
double r350390 = r350382 / r350386;
double r350391 = r350383 / r350390;
double r350392 = r350374 + r350391;
double r350393 = r350380 ? r350389 : r350392;
return r350393;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.7 |
|---|---|
| Target | 2.0 |
| Herbie | 2.1 |
if x < -1.324378283502527e-242 or 1.0427769012723432e-127 < x Initial program 7.1
rmApplied clear-num7.1
rmApplied associate-/r*1.1
if -1.324378283502527e-242 < x < 1.0427769012723432e-127Initial program 5.5
rmApplied associate-/l*5.7
Final simplification2.1
herbie shell --seed 2019322
(FPCore (x y z t)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, D"
:precision binary64
:herbie-target
(- x (+ (* x (/ y t)) (* (- z) (/ y t))))
(+ x (/ (* y (- z x)) t)))