Average Error: 6.0 → 1.6
Time: 12.4s
Precision: 64
\[x - \frac{y \cdot \left(z - t\right)}{a}\]
\[\begin{array}{l} \mathbf{if}\;a \le -2.599265967201577977490451997663087588063 \cdot 10^{-112}:\\ \;\;\;\;x - \frac{z - t}{a} \cdot y\\ \mathbf{elif}\;a \le 5.302570006482639697494559695939149034087 \cdot 10^{-78}:\\ \;\;\;\;x - \frac{1}{\frac{a}{\left(z - t\right) \cdot y}}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)\\ \end{array}\]
x - \frac{y \cdot \left(z - t\right)}{a}
\begin{array}{l}
\mathbf{if}\;a \le -2.599265967201577977490451997663087588063 \cdot 10^{-112}:\\
\;\;\;\;x - \frac{z - t}{a} \cdot y\\

\mathbf{elif}\;a \le 5.302570006482639697494559695939149034087 \cdot 10^{-78}:\\
\;\;\;\;x - \frac{1}{\frac{a}{\left(z - t\right) \cdot y}}\\

\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 r193820 = x;
        double r193821 = y;
        double r193822 = z;
        double r193823 = t;
        double r193824 = r193822 - r193823;
        double r193825 = r193821 * r193824;
        double r193826 = a;
        double r193827 = r193825 / r193826;
        double r193828 = r193820 - r193827;
        return r193828;
}

double f(double x, double y, double z, double t, double a) {
        double r193829 = a;
        double r193830 = -2.599265967201578e-112;
        bool r193831 = r193829 <= r193830;
        double r193832 = x;
        double r193833 = z;
        double r193834 = t;
        double r193835 = r193833 - r193834;
        double r193836 = r193835 / r193829;
        double r193837 = y;
        double r193838 = r193836 * r193837;
        double r193839 = r193832 - r193838;
        double r193840 = 5.30257000648264e-78;
        bool r193841 = r193829 <= r193840;
        double r193842 = 1.0;
        double r193843 = r193835 * r193837;
        double r193844 = r193829 / r193843;
        double r193845 = r193842 / r193844;
        double r193846 = r193832 - r193845;
        double r193847 = r193837 / r193829;
        double r193848 = r193834 - r193833;
        double r193849 = fma(r193847, r193848, r193832);
        double r193850 = r193841 ? r193846 : r193849;
        double r193851 = r193831 ? r193839 : r193850;
        return r193851;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Target

Original6.0
Target0.7
Herbie1.6
\[\begin{array}{l} \mathbf{if}\;y \lt -1.07612662163899753216593153715602325729 \cdot 10^{-10}:\\ \;\;\;\;x - \frac{1}{\frac{\frac{a}{z - t}}{y}}\\ \mathbf{elif}\;y \lt 2.894426862792089097262541964056085749132 \cdot 10^{-49}:\\ \;\;\;\;x - \frac{y \cdot \left(z - t\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;x - \frac{y}{\frac{a}{z - t}}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if a < -2.599265967201578e-112

    1. Initial program 7.6

      \[x - \frac{y \cdot \left(z - t\right)}{a}\]
    2. Using strategy rm
    3. Applied add-cube-cbrt8.0

      \[\leadsto x - \color{blue}{\left(\sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}} \cdot \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}}\right) \cdot \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}}}\]
    4. Applied add-sqr-sqrt36.0

      \[\leadsto \color{blue}{\sqrt{x} \cdot \sqrt{x}} - \left(\sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}} \cdot \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}}\right) \cdot \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}}\]
    5. Applied prod-diff36.0

      \[\leadsto \color{blue}{\mathsf{fma}\left(\sqrt{x}, \sqrt{x}, -\sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}} \cdot \left(\sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}} \cdot \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}}\right)\right) + \mathsf{fma}\left(-\sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}}, \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}} \cdot \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}}, \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}} \cdot \left(\sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}} \cdot \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}}\right)\right)}\]
    6. Simplified9.2

      \[\leadsto \color{blue}{\left(x - \frac{z - t}{a} \cdot y\right)} + \mathsf{fma}\left(-\sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}}, \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}} \cdot \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}}, \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}} \cdot \left(\sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}} \cdot \sqrt[3]{\frac{y \cdot \left(z - t\right)}{a}}\right)\right)\]
    7. Simplified1.8

      \[\leadsto \left(x - \frac{z - t}{a} \cdot y\right) + \color{blue}{0}\]

    if -2.599265967201578e-112 < a < 5.30257000648264e-78

    1. Initial program 1.1

      \[x - \frac{y \cdot \left(z - t\right)}{a}\]
    2. Using strategy rm
    3. Applied clear-num1.2

      \[\leadsto x - \color{blue}{\frac{1}{\frac{a}{y \cdot \left(z - t\right)}}}\]
    4. Simplified1.2

      \[\leadsto x - \frac{1}{\color{blue}{\frac{a}{\left(z - t\right) \cdot y}}}\]

    if 5.30257000648264e-78 < a

    1. Initial program 7.6

      \[x - \frac{y \cdot \left(z - t\right)}{a}\]
    2. Simplified1.7

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification1.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -2.599265967201577977490451997663087588063 \cdot 10^{-112}:\\ \;\;\;\;x - \frac{z - t}{a} \cdot y\\ \mathbf{elif}\;a \le 5.302570006482639697494559695939149034087 \cdot 10^{-78}:\\ \;\;\;\;x - \frac{1}{\frac{a}{\left(z - t\right) \cdot y}}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019325 +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)))