Average Error: 16.6 → 8.9
Time: 21.3s
Precision: 64
\[\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\]
\[\begin{array}{l} \mathbf{if}\;t \le -1.841694990887126029027896419805954252502 \cdot 10^{165}:\\ \;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\ \mathbf{elif}\;t \le -2.942786587816137231875687799555257197742 \cdot 10^{-122}:\\ \;\;\;\;\mathsf{fma}\left(t - z, \frac{1}{a - t} \cdot y, y + x\right)\\ \mathbf{elif}\;t \le 2.575849815118883486050979955176521796067 \cdot 10^{-98}:\\ \;\;\;\;\left(y \cdot \left(t - z\right)\right) \cdot \frac{1}{a - t} + \left(y + x\right)\\ \mathbf{elif}\;t \le 2.676545850642375828953340925870918680267 \cdot 10^{52}:\\ \;\;\;\;\mathsf{fma}\left(t - z, \frac{1}{a - t} \cdot y, y + x\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\ \end{array}\]
\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}
\begin{array}{l}
\mathbf{if}\;t \le -1.841694990887126029027896419805954252502 \cdot 10^{165}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\

\mathbf{elif}\;t \le -2.942786587816137231875687799555257197742 \cdot 10^{-122}:\\
\;\;\;\;\mathsf{fma}\left(t - z, \frac{1}{a - t} \cdot y, y + x\right)\\

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

\mathbf{elif}\;t \le 2.676545850642375828953340925870918680267 \cdot 10^{52}:\\
\;\;\;\;\mathsf{fma}\left(t - z, \frac{1}{a - t} \cdot y, y + x\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r28633911 = x;
        double r28633912 = y;
        double r28633913 = r28633911 + r28633912;
        double r28633914 = z;
        double r28633915 = t;
        double r28633916 = r28633914 - r28633915;
        double r28633917 = r28633916 * r28633912;
        double r28633918 = a;
        double r28633919 = r28633918 - r28633915;
        double r28633920 = r28633917 / r28633919;
        double r28633921 = r28633913 - r28633920;
        return r28633921;
}

double f(double x, double y, double z, double t, double a) {
        double r28633922 = t;
        double r28633923 = -1.841694990887126e+165;
        bool r28633924 = r28633922 <= r28633923;
        double r28633925 = z;
        double r28633926 = r28633925 / r28633922;
        double r28633927 = y;
        double r28633928 = x;
        double r28633929 = fma(r28633926, r28633927, r28633928);
        double r28633930 = -2.942786587816137e-122;
        bool r28633931 = r28633922 <= r28633930;
        double r28633932 = r28633922 - r28633925;
        double r28633933 = 1.0;
        double r28633934 = a;
        double r28633935 = r28633934 - r28633922;
        double r28633936 = r28633933 / r28633935;
        double r28633937 = r28633936 * r28633927;
        double r28633938 = r28633927 + r28633928;
        double r28633939 = fma(r28633932, r28633937, r28633938);
        double r28633940 = 2.5758498151188835e-98;
        bool r28633941 = r28633922 <= r28633940;
        double r28633942 = r28633927 * r28633932;
        double r28633943 = r28633942 * r28633936;
        double r28633944 = r28633943 + r28633938;
        double r28633945 = 2.676545850642376e+52;
        bool r28633946 = r28633922 <= r28633945;
        double r28633947 = r28633946 ? r28633939 : r28633929;
        double r28633948 = r28633941 ? r28633944 : r28633947;
        double r28633949 = r28633931 ? r28633939 : r28633948;
        double r28633950 = r28633924 ? r28633929 : r28633949;
        return r28633950;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Target

Original16.6
Target8.4
Herbie8.9
\[\begin{array}{l} \mathbf{if}\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \lt -1.366497088939072697550672266103566343531 \cdot 10^{-7}:\\ \;\;\;\;\left(y + x\right) - \left(\left(z - t\right) \cdot \frac{1}{a - t}\right) \cdot y\\ \mathbf{elif}\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \lt 1.475429344457723334351036314450840066235 \cdot 10^{-239}:\\ \;\;\;\;\frac{y \cdot \left(a - z\right) - x \cdot t}{a - t}\\ \mathbf{else}:\\ \;\;\;\;\left(y + x\right) - \left(\left(z - t\right) \cdot \frac{1}{a - t}\right) \cdot y\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if t < -1.841694990887126e+165 or 2.676545850642376e+52 < t

    1. Initial program 31.1

      \[\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\]
    2. Simplified22.3

      \[\leadsto \color{blue}{\mathsf{fma}\left(t - z, \frac{y}{a - t}, x + y\right)}\]
    3. Taylor expanded around inf 18.0

      \[\leadsto \color{blue}{\frac{z \cdot y}{t} + x}\]
    4. Simplified12.6

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}\]

    if -1.841694990887126e+165 < t < -2.942786587816137e-122 or 2.5758498151188835e-98 < t < 2.676545850642376e+52

    1. Initial program 12.7

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(t - z, \frac{y}{a - t}, x + y\right)}\]
    3. Using strategy rm
    4. Applied clear-num8.7

      \[\leadsto \mathsf{fma}\left(t - z, \color{blue}{\frac{1}{\frac{a - t}{y}}}, x + y\right)\]
    5. Using strategy rm
    6. Applied div-inv8.8

      \[\leadsto \mathsf{fma}\left(t - z, \frac{1}{\color{blue}{\left(a - t\right) \cdot \frac{1}{y}}}, x + y\right)\]
    7. Applied add-cube-cbrt8.8

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

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

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

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

    if -2.942786587816137e-122 < t < 2.5758498151188835e-98

    1. Initial program 4.7

      \[\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\]
    2. Simplified3.9

      \[\leadsto \color{blue}{\mathsf{fma}\left(t - z, \frac{y}{a - t}, x + y\right)}\]
    3. Using strategy rm
    4. Applied fma-udef3.9

      \[\leadsto \color{blue}{\left(t - z\right) \cdot \frac{y}{a - t} + \left(x + y\right)}\]
    5. Using strategy rm
    6. Applied div-inv3.9

      \[\leadsto \left(t - z\right) \cdot \color{blue}{\left(y \cdot \frac{1}{a - t}\right)} + \left(x + y\right)\]
    7. Applied associate-*r*4.7

      \[\leadsto \color{blue}{\left(\left(t - z\right) \cdot y\right) \cdot \frac{1}{a - t}} + \left(x + y\right)\]
  3. Recombined 3 regimes into one program.
  4. Final simplification8.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le -1.841694990887126029027896419805954252502 \cdot 10^{165}:\\ \;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\ \mathbf{elif}\;t \le -2.942786587816137231875687799555257197742 \cdot 10^{-122}:\\ \;\;\;\;\mathsf{fma}\left(t - z, \frac{1}{a - t} \cdot y, y + x\right)\\ \mathbf{elif}\;t \le 2.575849815118883486050979955176521796067 \cdot 10^{-98}:\\ \;\;\;\;\left(y \cdot \left(t - z\right)\right) \cdot \frac{1}{a - t} + \left(y + x\right)\\ \mathbf{elif}\;t \le 2.676545850642375828953340925870918680267 \cdot 10^{52}:\\ \;\;\;\;\mathsf{fma}\left(t - z, \frac{1}{a - t} \cdot y, y + x\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y, x\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019170 +o rules:numerics
(FPCore (x y z t a)
  :name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTick from plot-0.2.3.4, B"

  :herbie-target
  (if (< (- (+ x y) (/ (* (- z t) y) (- a t))) -1.3664970889390727e-07) (- (+ y x) (* (* (- z t) (/ 1.0 (- a t))) y)) (if (< (- (+ x y) (/ (* (- z t) y) (- a t))) 1.4754293444577233e-239) (/ (- (* y (- a z)) (* x t)) (- a t)) (- (+ y x) (* (* (- z t) (/ 1.0 (- a t))) y))))

  (- (+ x y) (/ (* (- z t) y) (- a t))))