Average Error: 1.4 → 0.6
Time: 5.6s
Precision: 64
\[x + y \cdot \frac{z - t}{a - t}\]
\[\begin{array}{l} \mathbf{if}\;y \le -4.83639407182839668 \cdot 10^{-119} \lor \neg \left(y \le 1.3093153923071058 \cdot 10^{-95}\right):\\ \;\;\;\;x + \frac{y}{\frac{a - t}{z - t}}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\ \end{array}\]
x + y \cdot \frac{z - t}{a - t}
\begin{array}{l}
\mathbf{if}\;y \le -4.83639407182839668 \cdot 10^{-119} \lor \neg \left(y \le 1.3093153923071058 \cdot 10^{-95}\right):\\
\;\;\;\;x + \frac{y}{\frac{a - t}{z - t}}\\

\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r708003 = x;
        double r708004 = y;
        double r708005 = z;
        double r708006 = t;
        double r708007 = r708005 - r708006;
        double r708008 = a;
        double r708009 = r708008 - r708006;
        double r708010 = r708007 / r708009;
        double r708011 = r708004 * r708010;
        double r708012 = r708003 + r708011;
        return r708012;
}

double f(double x, double y, double z, double t, double a) {
        double r708013 = y;
        double r708014 = -4.8363940718283967e-119;
        bool r708015 = r708013 <= r708014;
        double r708016 = 1.3093153923071058e-95;
        bool r708017 = r708013 <= r708016;
        double r708018 = !r708017;
        bool r708019 = r708015 || r708018;
        double r708020 = x;
        double r708021 = a;
        double r708022 = t;
        double r708023 = r708021 - r708022;
        double r708024 = z;
        double r708025 = r708024 - r708022;
        double r708026 = r708023 / r708025;
        double r708027 = r708013 / r708026;
        double r708028 = r708020 + r708027;
        double r708029 = r708013 * r708025;
        double r708030 = r708029 / r708023;
        double r708031 = r708020 + r708030;
        double r708032 = r708019 ? r708028 : r708031;
        return r708032;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original1.4
Target0.4
Herbie0.6
\[\begin{array}{l} \mathbf{if}\;y \lt -8.50808486055124107 \cdot 10^{-17}:\\ \;\;\;\;x + y \cdot \frac{z - t}{a - t}\\ \mathbf{elif}\;y \lt 2.8944268627920891 \cdot 10^{-49}:\\ \;\;\;\;x + \left(y \cdot \left(z - t\right)\right) \cdot \frac{1}{a - t}\\ \mathbf{else}:\\ \;\;\;\;x + y \cdot \frac{z - t}{a - t}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if y < -4.8363940718283967e-119 or 1.3093153923071058e-95 < y

    1. Initial program 0.6

      \[x + y \cdot \frac{z - t}{a - t}\]
    2. Using strategy rm
    3. Applied clear-num0.7

      \[\leadsto x + y \cdot \color{blue}{\frac{1}{\frac{a - t}{z - t}}}\]
    4. Using strategy rm
    5. Applied un-div-inv0.6

      \[\leadsto x + \color{blue}{\frac{y}{\frac{a - t}{z - t}}}\]

    if -4.8363940718283967e-119 < y < 1.3093153923071058e-95

    1. Initial program 2.8

      \[x + y \cdot \frac{z - t}{a - t}\]
    2. Using strategy rm
    3. Applied associate-*r/0.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -4.83639407182839668 \cdot 10^{-119} \lor \neg \left(y \le 1.3093153923071058 \cdot 10^{-95}\right):\\ \;\;\;\;x + \frac{y}{\frac{a - t}{z - t}}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\ \end{array}\]

Reproduce

herbie shell --seed 2020100 
(FPCore (x y z t a)
  :name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, B"
  :precision binary64

  :herbie-target
  (if (< y -8.508084860551241e-17) (+ x (* y (/ (- z t) (- a t)))) (if (< y 2.894426862792089e-49) (+ x (* (* y (- z t)) (/ 1 (- a t)))) (+ x (* y (/ (- z t) (- a t))))))

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