x + \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;a \le -139497726155533.078125 \lor \neg \left(a \le 2.135075560870679849452969788908829329444 \cdot 10^{-7}\right):\\
\;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\
\mathbf{else}:\\
\;\;\;\;x + \left(\frac{z \cdot y}{a} - \frac{t \cdot y}{a}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r231299 = x;
double r231300 = y;
double r231301 = z;
double r231302 = t;
double r231303 = r231301 - r231302;
double r231304 = r231300 * r231303;
double r231305 = a;
double r231306 = r231304 / r231305;
double r231307 = r231299 + r231306;
return r231307;
}
double f(double x, double y, double z, double t, double a) {
double r231308 = a;
double r231309 = -139497726155533.08;
bool r231310 = r231308 <= r231309;
double r231311 = 2.1350755608706798e-07;
bool r231312 = r231308 <= r231311;
double r231313 = !r231312;
bool r231314 = r231310 || r231313;
double r231315 = x;
double r231316 = y;
double r231317 = z;
double r231318 = t;
double r231319 = r231317 - r231318;
double r231320 = r231308 / r231319;
double r231321 = r231316 / r231320;
double r231322 = r231315 + r231321;
double r231323 = r231317 * r231316;
double r231324 = r231323 / r231308;
double r231325 = r231318 * r231316;
double r231326 = r231325 / r231308;
double r231327 = r231324 - r231326;
double r231328 = r231315 + r231327;
double r231329 = r231314 ? r231322 : r231328;
return r231329;
}




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.7 |
| Herbie | 0.6 |
if a < -139497726155533.08 or 2.1350755608706798e-07 < a Initial program 9.9
rmApplied associate-/l*0.4
if -139497726155533.08 < a < 2.1350755608706798e-07Initial program 0.8
rmApplied clear-num0.9
rmApplied associate-/r*3.1
Taylor expanded around 0 0.8
Final simplification0.6
herbie shell --seed 2019212
(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.07612662163899753e-10) (+ x (/ 1 (/ (/ a (- z t)) y))) (if (< y 2.8944268627920891e-49) (+ x (/ (* y (- z t)) a)) (+ x (/ y (/ a (- z t))))))
(+ x (/ (* y (- z t)) a)))