x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;a \le -9.123265245159162379441648817674026348617 \cdot 10^{-287}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)\\
\mathbf{elif}\;a \le 160974762298423667326976:\\
\;\;\;\;x - \frac{1}{\frac{a}{y \cdot \left(z - t\right)}}\\
\mathbf{else}:\\
\;\;\;\;x - \frac{y}{\sqrt{a}} \cdot \frac{z - t}{\sqrt{a}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r259083 = x;
double r259084 = y;
double r259085 = z;
double r259086 = t;
double r259087 = r259085 - r259086;
double r259088 = r259084 * r259087;
double r259089 = a;
double r259090 = r259088 / r259089;
double r259091 = r259083 - r259090;
return r259091;
}
double f(double x, double y, double z, double t, double a) {
double r259092 = a;
double r259093 = -9.123265245159162e-287;
bool r259094 = r259092 <= r259093;
double r259095 = y;
double r259096 = r259095 / r259092;
double r259097 = t;
double r259098 = z;
double r259099 = r259097 - r259098;
double r259100 = x;
double r259101 = fma(r259096, r259099, r259100);
double r259102 = 1.6097476229842367e+23;
bool r259103 = r259092 <= r259102;
double r259104 = 1.0;
double r259105 = r259098 - r259097;
double r259106 = r259095 * r259105;
double r259107 = r259092 / r259106;
double r259108 = r259104 / r259107;
double r259109 = r259100 - r259108;
double r259110 = sqrt(r259092);
double r259111 = r259095 / r259110;
double r259112 = r259105 / r259110;
double r259113 = r259111 * r259112;
double r259114 = r259100 - r259113;
double r259115 = r259103 ? r259109 : r259114;
double r259116 = r259094 ? r259101 : r259115;
return r259116;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 6.2 |
|---|---|
| Target | 0.7 |
| Herbie | 1.4 |
if a < -9.123265245159162e-287Initial program 6.4
Simplified2.0
if -9.123265245159162e-287 < a < 1.6097476229842367e+23Initial program 1.0
rmApplied clear-num1.0
if 1.6097476229842367e+23 < a Initial program 10.0
rmApplied add-sqr-sqrt10.1
Applied times-frac0.7
Final simplification1.4
herbie shell --seed 2020001 +o rules:numerics
(FPCore (x y z t a)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, F"
:precision binary64
:herbie-target
(if (< y -1.0761266216389975e-10) (- x (/ 1 (/ (/ a (- z t)) y))) (if (< y 2.894426862792089e-49) (- x (/ (* y (- z t)) a)) (- x (/ y (/ a (- z t))))))
(- x (/ (* y (- z t)) a)))