x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;y \le 2.7473712769312009 \cdot 10^{-146}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t}, z - x, x\right)\\
\mathbf{elif}\;y \le 3.65776030122223192 \cdot 10^{289}:\\
\;\;\;\;y \cdot \frac{z - x}{t} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\sqrt[3]{z} \cdot \sqrt[3]{z}, \sqrt[3]{z}, -x \cdot 1\right) \cdot \frac{y}{t} + \mathsf{fma}\left(\mathsf{fma}\left(-x, 1, x\right), \frac{y}{t}, x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r288296 = x;
double r288297 = y;
double r288298 = z;
double r288299 = r288298 - r288296;
double r288300 = r288297 * r288299;
double r288301 = t;
double r288302 = r288300 / r288301;
double r288303 = r288296 + r288302;
return r288303;
}
double f(double x, double y, double z, double t) {
double r288304 = y;
double r288305 = 2.747371276931201e-146;
bool r288306 = r288304 <= r288305;
double r288307 = t;
double r288308 = r288304 / r288307;
double r288309 = z;
double r288310 = x;
double r288311 = r288309 - r288310;
double r288312 = fma(r288308, r288311, r288310);
double r288313 = 3.657760301222232e+289;
bool r288314 = r288304 <= r288313;
double r288315 = r288311 / r288307;
double r288316 = r288304 * r288315;
double r288317 = r288316 + r288310;
double r288318 = cbrt(r288309);
double r288319 = r288318 * r288318;
double r288320 = 1.0;
double r288321 = r288310 * r288320;
double r288322 = -r288321;
double r288323 = fma(r288319, r288318, r288322);
double r288324 = r288323 * r288308;
double r288325 = -r288310;
double r288326 = fma(r288325, r288320, r288310);
double r288327 = fma(r288326, r288308, r288310);
double r288328 = r288324 + r288327;
double r288329 = r288314 ? r288317 : r288328;
double r288330 = r288306 ? r288312 : r288329;
return r288330;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.1 |
|---|---|
| Target | 2.0 |
| Herbie | 2.3 |
if y < 2.747371276931201e-146Initial program 4.6
Simplified1.8
if 2.747371276931201e-146 < y < 3.657760301222232e+289Initial program 8.7
Simplified2.4
rmApplied fma-udef2.4
rmApplied div-inv2.5
Applied associate-*l*3.4
Simplified3.3
if 3.657760301222232e+289 < y Initial program 35.0
Simplified9.9
rmApplied fma-udef9.9
rmApplied *-un-lft-identity9.9
Applied add-cube-cbrt10.3
Applied prod-diff10.3
Applied distribute-rgt-in10.3
Applied associate-+l+10.3
Simplified10.3
Final simplification2.3
herbie shell --seed 2020035 +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)))