x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;t \le 4.1052985606206364 \cdot 10^{-305}:\\
\;\;\;\;\frac{y}{t} \cdot \left(z - x\right) + x\\
\mathbf{elif}\;t \le 3.4271601891193827 \cdot 10^{131}:\\
\;\;\;\;\frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{\sqrt{t}} \cdot \left(\frac{\sqrt[3]{y}}{\sqrt{t}} \cdot \left(z - x\right)\right) + x\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\frac{{z}^{1}}{\frac{t}{y}} - \frac{y}{t} \cdot x\right) + \frac{y}{t} \cdot \mathsf{fma}\left(-x, 1, x\right)\right) + x\\
\end{array}double f(double x, double y, double z, double t) {
double r352290 = x;
double r352291 = y;
double r352292 = z;
double r352293 = r352292 - r352290;
double r352294 = r352291 * r352293;
double r352295 = t;
double r352296 = r352294 / r352295;
double r352297 = r352290 + r352296;
return r352297;
}
double f(double x, double y, double z, double t) {
double r352298 = t;
double r352299 = 4.1052985606206364e-305;
bool r352300 = r352298 <= r352299;
double r352301 = y;
double r352302 = r352301 / r352298;
double r352303 = z;
double r352304 = x;
double r352305 = r352303 - r352304;
double r352306 = r352302 * r352305;
double r352307 = r352306 + r352304;
double r352308 = 3.4271601891193827e+131;
bool r352309 = r352298 <= r352308;
double r352310 = cbrt(r352301);
double r352311 = r352310 * r352310;
double r352312 = sqrt(r352298);
double r352313 = r352311 / r352312;
double r352314 = r352310 / r352312;
double r352315 = r352314 * r352305;
double r352316 = r352313 * r352315;
double r352317 = r352316 + r352304;
double r352318 = 1.0;
double r352319 = pow(r352303, r352318);
double r352320 = r352298 / r352301;
double r352321 = r352319 / r352320;
double r352322 = r352302 * r352304;
double r352323 = r352321 - r352322;
double r352324 = -r352304;
double r352325 = fma(r352324, r352318, r352304);
double r352326 = r352302 * r352325;
double r352327 = r352323 + r352326;
double r352328 = r352327 + r352304;
double r352329 = r352309 ? r352317 : r352328;
double r352330 = r352300 ? r352307 : r352329;
return r352330;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.6 |
|---|---|
| Target | 2.2 |
| Herbie | 1.8 |
if t < 4.1052985606206364e-305Initial program 6.4
Simplified2.3
rmApplied fma-udef2.3
if 4.1052985606206364e-305 < t < 3.4271601891193827e+131Initial program 3.2
Simplified2.6
rmApplied fma-udef2.6
rmApplied add-sqr-sqrt2.8
Applied add-cube-cbrt3.3
Applied times-frac3.3
Applied associate-*l*1.4
if 3.4271601891193827e+131 < t Initial program 12.8
Simplified1.3
rmApplied fma-udef1.3
rmApplied add-cube-cbrt1.4
Applied add-cube-cbrt1.6
Applied prod-diff1.6
Applied distribute-lft-in1.6
Simplified1.7
Simplified1.7
rmApplied pow1/333.2
Applied pow-pow1.5
Simplified1.5
Final simplification1.8
herbie shell --seed 2020036 +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)))