x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;y \le -792628.28179913713:\\
\;\;\;\;\mathsf{fma}\left(\left(t - z\right) \cdot \frac{1}{a}, y, x\right)\\
\mathbf{elif}\;y \le 9.3422674073445563 \cdot 10^{-106}:\\
\;\;\;\;x - \frac{y \cdot \left(z - t\right)}{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 r390672 = x;
double r390673 = y;
double r390674 = z;
double r390675 = t;
double r390676 = r390674 - r390675;
double r390677 = r390673 * r390676;
double r390678 = a;
double r390679 = r390677 / r390678;
double r390680 = r390672 - r390679;
return r390680;
}
double f(double x, double y, double z, double t, double a) {
double r390681 = y;
double r390682 = -792628.2817991371;
bool r390683 = r390681 <= r390682;
double r390684 = t;
double r390685 = z;
double r390686 = r390684 - r390685;
double r390687 = 1.0;
double r390688 = a;
double r390689 = r390687 / r390688;
double r390690 = r390686 * r390689;
double r390691 = x;
double r390692 = fma(r390690, r390681, r390691);
double r390693 = 9.342267407344556e-106;
bool r390694 = r390681 <= r390693;
double r390695 = r390685 - r390684;
double r390696 = r390681 * r390695;
double r390697 = r390696 / r390688;
double r390698 = r390691 - r390697;
double r390699 = r390688 / r390695;
double r390700 = r390681 / r390699;
double r390701 = r390691 - r390700;
double r390702 = r390694 ? r390698 : r390701;
double r390703 = r390683 ? r390692 : r390702;
return r390703;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 6.3 |
|---|---|
| Target | 0.7 |
| Herbie | 0.9 |
if y < -792628.2817991371Initial program 15.9
Simplified0.7
rmApplied div-inv0.8
if -792628.2817991371 < y < 9.342267407344556e-106Initial program 0.6
if 9.342267407344556e-106 < y Initial program 10.7
rmApplied associate-/l*1.6
Final simplification0.9
herbie shell --seed 2020046 +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)))