x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;x + \frac{y \cdot \left(z - x\right)}{t} \le -1.12539201893726255 \cdot 10^{306}:\\
\;\;\;\;\frac{z - x}{\frac{t}{y}} + x\\
\mathbf{elif}\;x + \frac{y \cdot \left(z - x\right)}{t} \le -5.52428703018855934 \cdot 10^{-210}:\\
\;\;\;\;x + \frac{y \cdot \left(z - x\right)}{t}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t}, z - x, x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r286322 = x;
double r286323 = y;
double r286324 = z;
double r286325 = r286324 - r286322;
double r286326 = r286323 * r286325;
double r286327 = t;
double r286328 = r286326 / r286327;
double r286329 = r286322 + r286328;
return r286329;
}
double f(double x, double y, double z, double t) {
double r286330 = x;
double r286331 = y;
double r286332 = z;
double r286333 = r286332 - r286330;
double r286334 = r286331 * r286333;
double r286335 = t;
double r286336 = r286334 / r286335;
double r286337 = r286330 + r286336;
double r286338 = -1.1253920189372625e+306;
bool r286339 = r286337 <= r286338;
double r286340 = r286335 / r286331;
double r286341 = r286333 / r286340;
double r286342 = r286341 + r286330;
double r286343 = -5.5242870301885593e-210;
bool r286344 = r286337 <= r286343;
double r286345 = r286331 / r286335;
double r286346 = fma(r286345, r286333, r286330);
double r286347 = r286344 ? r286337 : r286346;
double r286348 = r286339 ? r286342 : r286347;
return r286348;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.3 |
|---|---|
| Target | 2.0 |
| Herbie | 1.3 |
if (+ x (/ (* y (- z x)) t)) < -1.1253920189372625e+306Initial program 61.5
rmApplied div-inv61.5
rmApplied pow161.5
Applied pow161.5
Applied pow161.5
Applied pow-prod-down61.5
Applied pow-prod-down61.5
Simplified0.3
if -1.1253920189372625e+306 < (+ x (/ (* y (- z x)) t)) < -5.5242870301885593e-210Initial program 0.3
if -5.5242870301885593e-210 < (+ x (/ (* y (- z x)) t)) Initial program 6.4
Simplified2.2
Final simplification1.3
herbie shell --seed 2020045 +o rules:numerics
(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)))