x + \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;a \le -5.386011167286209797538090785742809716412 \cdot 10^{-28} \lor \neg \left(a \le 4635323820368954973487104\right):\\
\;\;\;\;x + y \cdot \frac{z - t}{a}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot z + y \cdot \left(-t\right)}{a}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r208030 = x;
double r208031 = y;
double r208032 = z;
double r208033 = t;
double r208034 = r208032 - r208033;
double r208035 = r208031 * r208034;
double r208036 = a;
double r208037 = r208035 / r208036;
double r208038 = r208030 + r208037;
return r208038;
}
double f(double x, double y, double z, double t, double a) {
double r208039 = a;
double r208040 = -5.38601116728621e-28;
bool r208041 = r208039 <= r208040;
double r208042 = 4.635323820368955e+24;
bool r208043 = r208039 <= r208042;
double r208044 = !r208043;
bool r208045 = r208041 || r208044;
double r208046 = x;
double r208047 = y;
double r208048 = z;
double r208049 = t;
double r208050 = r208048 - r208049;
double r208051 = r208050 / r208039;
double r208052 = r208047 * r208051;
double r208053 = r208046 + r208052;
double r208054 = r208047 * r208048;
double r208055 = -r208049;
double r208056 = r208047 * r208055;
double r208057 = r208054 + r208056;
double r208058 = r208057 / r208039;
double r208059 = r208046 + r208058;
double r208060 = r208045 ? r208053 : r208059;
return r208060;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 6.3 |
|---|---|
| Target | 0.6 |
| Herbie | 0.6 |
if a < -5.38601116728621e-28 or 4.635323820368955e+24 < a Initial program 9.8
rmApplied *-un-lft-identity9.8
Applied times-frac0.6
Simplified0.6
if -5.38601116728621e-28 < a < 4.635323820368955e+24Initial program 0.6
rmApplied sub-neg0.6
Applied distribute-lft-in0.6
Final simplification0.6
herbie shell --seed 2019322
(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)))