x + \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;y \cdot \left(z - t\right) \le -9.995484289270434089051779709495019769676 \cdot 10^{266}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, z - t, x\right)\\
\mathbf{elif}\;y \cdot \left(z - t\right) \le 8.372301841351568798694844482890536564686 \cdot 10^{181}:\\
\;\;\;\;x + \left(y \cdot \left(z - t\right)\right) \cdot \frac{1}{a}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r395944 = x;
double r395945 = y;
double r395946 = z;
double r395947 = t;
double r395948 = r395946 - r395947;
double r395949 = r395945 * r395948;
double r395950 = a;
double r395951 = r395949 / r395950;
double r395952 = r395944 + r395951;
return r395952;
}
double f(double x, double y, double z, double t, double a) {
double r395953 = y;
double r395954 = z;
double r395955 = t;
double r395956 = r395954 - r395955;
double r395957 = r395953 * r395956;
double r395958 = -9.995484289270434e+266;
bool r395959 = r395957 <= r395958;
double r395960 = a;
double r395961 = r395953 / r395960;
double r395962 = x;
double r395963 = fma(r395961, r395956, r395962);
double r395964 = 8.372301841351569e+181;
bool r395965 = r395957 <= r395964;
double r395966 = 1.0;
double r395967 = r395966 / r395960;
double r395968 = r395957 * r395967;
double r395969 = r395962 + r395968;
double r395970 = r395960 / r395956;
double r395971 = r395953 / r395970;
double r395972 = r395962 + r395971;
double r395973 = r395965 ? r395969 : r395972;
double r395974 = r395959 ? r395963 : r395973;
return r395974;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 5.8 |
|---|---|
| Target | 0.6 |
| Herbie | 0.4 |
if (* y (- z t)) < -9.995484289270434e+266Initial program 46.2
Simplified0.2
if -9.995484289270434e+266 < (* y (- z t)) < 8.372301841351569e+181Initial program 0.3
rmApplied div-inv0.4
if 8.372301841351569e+181 < (* y (- z t)) Initial program 23.4
rmApplied associate-/l*0.9
Final simplification0.4
herbie shell --seed 2019362 +o rules:numerics
(FPCore (x y z t a)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, E"
: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)))