x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;y \le -2.121711157699570129271913673205635143014 \cdot 10^{83}:\\
\;\;\;\;y \cdot \frac{z - x}{t} + x\\
\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 r281189 = x;
double r281190 = y;
double r281191 = z;
double r281192 = r281191 - r281189;
double r281193 = r281190 * r281192;
double r281194 = t;
double r281195 = r281193 / r281194;
double r281196 = r281189 + r281195;
return r281196;
}
double f(double x, double y, double z, double t) {
double r281197 = y;
double r281198 = -2.12171115769957e+83;
bool r281199 = r281197 <= r281198;
double r281200 = z;
double r281201 = x;
double r281202 = r281200 - r281201;
double r281203 = t;
double r281204 = r281202 / r281203;
double r281205 = r281197 * r281204;
double r281206 = r281205 + r281201;
double r281207 = r281197 / r281203;
double r281208 = fma(r281207, r281202, r281201);
double r281209 = r281199 ? r281206 : r281208;
return r281209;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.4 |
|---|---|
| Target | 2.0 |
| Herbie | 1.7 |
if y < -2.12171115769957e+83Initial program 22.0
Simplified4.5
rmApplied fma-udef4.5
rmApplied div-inv4.6
Applied associate-*l*2.4
Simplified2.4
if -2.12171115769957e+83 < y Initial program 4.3
Simplified1.6
rmApplied fma-udef1.6
rmApplied fma-def1.6
Final simplification1.7
herbie shell --seed 2019354 +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)))