x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;y \cdot \left(z - t\right) = -\infty:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)\\
\mathbf{elif}\;y \cdot \left(z - t\right) \le 1.99823853113780918 \cdot 10^{149}:\\
\;\;\;\;x - \frac{y \cdot \left(z - t\right)}{a}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{t - z}{a}, y, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r202053 = x;
double r202054 = y;
double r202055 = z;
double r202056 = t;
double r202057 = r202055 - r202056;
double r202058 = r202054 * r202057;
double r202059 = a;
double r202060 = r202058 / r202059;
double r202061 = r202053 - r202060;
return r202061;
}
double f(double x, double y, double z, double t, double a) {
double r202062 = y;
double r202063 = z;
double r202064 = t;
double r202065 = r202063 - r202064;
double r202066 = r202062 * r202065;
double r202067 = -inf.0;
bool r202068 = r202066 <= r202067;
double r202069 = a;
double r202070 = r202062 / r202069;
double r202071 = r202064 - r202063;
double r202072 = x;
double r202073 = fma(r202070, r202071, r202072);
double r202074 = 1.9982385311378092e+149;
bool r202075 = r202066 <= r202074;
double r202076 = r202066 / r202069;
double r202077 = r202072 - r202076;
double r202078 = r202071 / r202069;
double r202079 = fma(r202078, r202062, r202072);
double r202080 = r202075 ? r202077 : r202079;
double r202081 = r202068 ? r202073 : r202080;
return r202081;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 6.0 |
|---|---|
| Target | 0.6 |
| Herbie | 0.6 |
if (* y (- z t)) < -inf.0Initial program 64.0
Simplified0.2
if -inf.0 < (* y (- z t)) < 1.9982385311378092e+149Initial program 0.3
if 1.9982385311378092e+149 < (* y (- z t)) Initial program 21.1
Simplified1.6
rmApplied fma-udef1.6
Simplified1.5
rmApplied *-un-lft-identity1.5
Applied *-un-lft-identity1.5
Applied distribute-lft-out1.5
Simplified2.2
Final simplification0.6
herbie shell --seed 2019199 +o rules:numerics
(FPCore (x y z t a)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, F"
:herbie-target
(if (< y -1.0761266216389975e-10) (- x (/ 1.0 (/ (/ a (- z t)) y))) (if (< y 2.894426862792089e-49) (- x (/ (* y (- z t)) a)) (- x (/ y (/ a (- z t))))))
(- x (/ (* y (- z t)) a)))