x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;a \le -1.8751699245657391 \cdot 10^{-66}:\\
\;\;\;\;\frac{y}{\frac{a}{t - z}} + x\\
\mathbf{elif}\;a \le 6.102226148835496 \cdot 10^{-161}:\\
\;\;\;\;\left(x + \frac{t \cdot y}{a}\right) - \frac{z \cdot y}{a}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r423256 = x;
double r423257 = y;
double r423258 = z;
double r423259 = t;
double r423260 = r423258 - r423259;
double r423261 = r423257 * r423260;
double r423262 = a;
double r423263 = r423261 / r423262;
double r423264 = r423256 - r423263;
return r423264;
}
double f(double x, double y, double z, double t, double a) {
double r423265 = a;
double r423266 = -1.875169924565739e-66;
bool r423267 = r423265 <= r423266;
double r423268 = y;
double r423269 = t;
double r423270 = z;
double r423271 = r423269 - r423270;
double r423272 = r423265 / r423271;
double r423273 = r423268 / r423272;
double r423274 = x;
double r423275 = r423273 + r423274;
double r423276 = 6.102226148835496e-161;
bool r423277 = r423265 <= r423276;
double r423278 = r423269 * r423268;
double r423279 = r423278 / r423265;
double r423280 = r423274 + r423279;
double r423281 = r423270 * r423268;
double r423282 = r423281 / r423265;
double r423283 = r423280 - r423282;
double r423284 = r423268 / r423265;
double r423285 = fma(r423284, r423271, r423274);
double r423286 = r423277 ? r423283 : r423285;
double r423287 = r423267 ? r423275 : r423286;
return r423287;
}




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 | 1.4 |
if a < -1.875169924565739e-66Initial program 7.6
Simplified0.9
rmApplied clear-num1.0
rmApplied fma-udef1.0
Simplified0.8
if -1.875169924565739e-66 < a < 6.102226148835496e-161Initial program 1.2
Simplified21.7
rmApplied clear-num21.8
rmApplied fma-udef21.8
Simplified20.0
Taylor expanded around 0 1.2
if 6.102226148835496e-161 < a Initial program 6.8
Simplified3.0
rmApplied clear-num3.1
rmApplied fma-udef3.1
Simplified2.7
rmApplied associate-/r/2.0
Applied fma-def2.0
Final simplification1.4
herbie shell --seed 2020042 +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)))