Average Error: 16.8 → 6.6
Time: 21.0s
Precision: 64
\[\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}\]
\[\begin{array}{l} \mathbf{if}\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \le -1.272792786955583 \cdot 10^{-212} \lor \neg \left(\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \le 0.0\right):\\ \;\;\;\;x + \mathsf{fma}\left(\frac{t}{a - t} - z \cdot \frac{1}{a - t}, y, y\right)\\ \mathbf{else}:\\ \;\;\;\;x + \frac{z \cdot y}{t}\\ \end{array}\]
\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}
\begin{array}{l}
\mathbf{if}\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \le -1.272792786955583 \cdot 10^{-212} \lor \neg \left(\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \le 0.0\right):\\
\;\;\;\;x + \mathsf{fma}\left(\frac{t}{a - t} - z \cdot \frac{1}{a - t}, y, y\right)\\

\mathbf{else}:\\
\;\;\;\;x + \frac{z \cdot y}{t}\\

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r535125 = x;
        double r535126 = y;
        double r535127 = r535125 + r535126;
        double r535128 = z;
        double r535129 = t;
        double r535130 = r535128 - r535129;
        double r535131 = r535130 * r535126;
        double r535132 = a;
        double r535133 = r535132 - r535129;
        double r535134 = r535131 / r535133;
        double r535135 = r535127 - r535134;
        return r535135;
}

double f(double x, double y, double z, double t, double a) {
        double r535136 = x;
        double r535137 = y;
        double r535138 = r535136 + r535137;
        double r535139 = z;
        double r535140 = t;
        double r535141 = r535139 - r535140;
        double r535142 = r535141 * r535137;
        double r535143 = a;
        double r535144 = r535143 - r535140;
        double r535145 = r535142 / r535144;
        double r535146 = r535138 - r535145;
        double r535147 = -1.272792786955583e-212;
        bool r535148 = r535146 <= r535147;
        double r535149 = 0.0;
        bool r535150 = r535146 <= r535149;
        double r535151 = !r535150;
        bool r535152 = r535148 || r535151;
        double r535153 = r535140 / r535144;
        double r535154 = 1.0;
        double r535155 = r535154 / r535144;
        double r535156 = r535139 * r535155;
        double r535157 = r535153 - r535156;
        double r535158 = fma(r535157, r535137, r535137);
        double r535159 = r535136 + r535158;
        double r535160 = r535139 * r535137;
        double r535161 = r535160 / r535140;
        double r535162 = r535136 + r535161;
        double r535163 = r535152 ? r535159 : r535162;
        return r535163;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Target

Original16.8
Target8.6
Herbie6.6
\[\begin{array}{l} \mathbf{if}\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \lt -1.3664970889390727 \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.47542934445772333 \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 2 regimes
  2. if (- (+ x y) (/ (* (- z t) y) (- a t))) < -1.272792786955583e-212 or 0.0 < (- (+ x y) (/ (* (- z t) y) (- a t)))

    1. Initial program 12.9

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

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

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

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

    if -1.272792786955583e-212 < (- (+ x y) (/ (* (- z t) y) (- a t))) < 0.0

    1. Initial program 55.9

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

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

      \[\leadsto x + \color{blue}{\frac{z \cdot y}{t}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification6.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \le -1.272792786955583 \cdot 10^{-212} \lor \neg \left(\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t} \le 0.0\right):\\ \;\;\;\;x + \mathsf{fma}\left(\frac{t}{a - t} - z \cdot \frac{1}{a - t}, y, y\right)\\ \mathbf{else}:\\ \;\;\;\;x + \frac{z \cdot y}{t}\\ \end{array}\]

Reproduce

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

  :herbie-target
  (if (< (- (+ x y) (/ (* (- z t) y) (- a t))) -1.3664970889390727e-07) (- (+ y x) (* (* (- z t) (/ 1 (- 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 (- a t))) y))))

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