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 r330902 = x;
double r330903 = y;
double r330904 = z;
double r330905 = r330904 - r330902;
double r330906 = r330903 * r330905;
double r330907 = t;
double r330908 = r330906 / r330907;
double r330909 = r330902 + r330908;
return r330909;
}
double f(double x, double y, double z, double t) {
double r330910 = t;
double r330911 = 4.1052985606206364e-305;
bool r330912 = r330910 <= r330911;
double r330913 = y;
double r330914 = r330913 / r330910;
double r330915 = z;
double r330916 = x;
double r330917 = r330915 - r330916;
double r330918 = r330914 * r330917;
double r330919 = r330918 + r330916;
double r330920 = 3.4271601891193827e+131;
bool r330921 = r330910 <= r330920;
double r330922 = cbrt(r330913);
double r330923 = r330922 * r330922;
double r330924 = sqrt(r330910);
double r330925 = r330923 / r330924;
double r330926 = r330922 / r330924;
double r330927 = r330926 * r330917;
double r330928 = r330925 * r330927;
double r330929 = r330928 + r330916;
double r330930 = 1.0;
double r330931 = pow(r330915, r330930);
double r330932 = r330910 / r330913;
double r330933 = r330931 / r330932;
double r330934 = r330914 * r330916;
double r330935 = r330933 - r330934;
double r330936 = -r330916;
double r330937 = fma(r330936, r330930, r330916);
double r330938 = r330914 * r330937;
double r330939 = r330935 + r330938;
double r330940 = r330939 + r330916;
double r330941 = r330921 ? r330929 : r330940;
double r330942 = r330912 ? r330919 : r330941;
return r330942;
}




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)))