x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;y \cdot \left(z - t\right) \le -9.0544991846769346 \cdot 10^{260}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)\\
\mathbf{elif}\;y \cdot \left(z - t\right) \le 2.8461840642724514 \cdot 10^{164}:\\
\;\;\;\;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 r1656 = x;
double r1657 = y;
double r1658 = z;
double r1659 = t;
double r1660 = r1658 - r1659;
double r1661 = r1657 * r1660;
double r1662 = a;
double r1663 = r1661 / r1662;
double r1664 = r1656 - r1663;
return r1664;
}
double f(double x, double y, double z, double t, double a) {
double r1665 = y;
double r1666 = z;
double r1667 = t;
double r1668 = r1666 - r1667;
double r1669 = r1665 * r1668;
double r1670 = -9.054499184676935e+260;
bool r1671 = r1669 <= r1670;
double r1672 = a;
double r1673 = r1665 / r1672;
double r1674 = r1667 - r1666;
double r1675 = x;
double r1676 = fma(r1673, r1674, r1675);
double r1677 = 2.8461840642724514e+164;
bool r1678 = r1669 <= r1677;
double r1679 = r1669 / r1672;
double r1680 = r1675 - r1679;
double r1681 = r1672 / r1668;
double r1682 = r1665 / r1681;
double r1683 = r1675 - r1682;
double r1684 = r1678 ? r1680 : r1683;
double r1685 = r1671 ? r1676 : r1684;
return r1685;
}




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.7 |
| Herbie | 0.5 |
if (* y (- z t)) < -9.054499184676935e+260Initial program 42.1
Simplified0.2
if -9.054499184676935e+260 < (* y (- z t)) < 2.8461840642724514e+164Initial program 0.3
if 2.8461840642724514e+164 < (* y (- z t)) Initial program 23.2
rmApplied associate-/l*1.3
Final simplification0.5
herbie shell --seed 2020025 +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)))