Average Error: 2.0 → 2.3
Time: 18.4s
Precision: 64
\[x + \left(y - x\right) \cdot \frac{z}{t}\]
\[\begin{array}{l} \mathbf{if}\;\frac{z}{t} \le -2.080547098596797432317128420294030987216 \cdot 10^{-53}:\\ \;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\ \mathbf{elif}\;\frac{z}{t} \le 6.621919932312076046507554334385359162004 \cdot 10^{-309}:\\ \;\;\;\;x + \frac{z \cdot \left(y - x\right)}{t}\\ \mathbf{else}:\\ \;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\ \end{array}\]
x + \left(y - x\right) \cdot \frac{z}{t}
\begin{array}{l}
\mathbf{if}\;\frac{z}{t} \le -2.080547098596797432317128420294030987216 \cdot 10^{-53}:\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\

\mathbf{elif}\;\frac{z}{t} \le 6.621919932312076046507554334385359162004 \cdot 10^{-309}:\\
\;\;\;\;x + \frac{z \cdot \left(y - x\right)}{t}\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r38399796 = x;
        double r38399797 = y;
        double r38399798 = r38399797 - r38399796;
        double r38399799 = z;
        double r38399800 = t;
        double r38399801 = r38399799 / r38399800;
        double r38399802 = r38399798 * r38399801;
        double r38399803 = r38399796 + r38399802;
        return r38399803;
}

double f(double x, double y, double z, double t) {
        double r38399804 = z;
        double r38399805 = t;
        double r38399806 = r38399804 / r38399805;
        double r38399807 = -2.0805470985967974e-53;
        bool r38399808 = r38399806 <= r38399807;
        double r38399809 = x;
        double r38399810 = y;
        double r38399811 = r38399810 - r38399809;
        double r38399812 = r38399811 * r38399806;
        double r38399813 = r38399809 + r38399812;
        double r38399814 = 6.621919932312076e-309;
        bool r38399815 = r38399806 <= r38399814;
        double r38399816 = r38399804 * r38399811;
        double r38399817 = r38399816 / r38399805;
        double r38399818 = r38399809 + r38399817;
        double r38399819 = r38399815 ? r38399818 : r38399813;
        double r38399820 = r38399808 ? r38399813 : r38399819;
        return r38399820;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original2.0
Target2.2
Herbie2.3
\[\begin{array}{l} \mathbf{if}\;\left(y - x\right) \cdot \frac{z}{t} \lt -1013646692435.88671875:\\ \;\;\;\;x + \frac{y - x}{\frac{t}{z}}\\ \mathbf{elif}\;\left(y - x\right) \cdot \frac{z}{t} \lt -0.0:\\ \;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y - x}{\frac{t}{z}}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if (/ z t) < -2.0805470985967974e-53 or 6.621919932312076e-309 < (/ z t)

    1. Initial program 2.1

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

    if -2.0805470985967974e-53 < (/ z t) < 6.621919932312076e-309

    1. Initial program 1.8

      \[x + \left(y - x\right) \cdot \frac{z}{t}\]
    2. Taylor expanded around 0 2.5

      \[\leadsto x + \color{blue}{\left(\frac{z \cdot y}{t} - \frac{x \cdot z}{t}\right)}\]
    3. Simplified2.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{z}{t} \le -2.080547098596797432317128420294030987216 \cdot 10^{-53}:\\ \;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\ \mathbf{elif}\;\frac{z}{t} \le 6.621919932312076046507554334385359162004 \cdot 10^{-309}:\\ \;\;\;\;x + \frac{z \cdot \left(y - x\right)}{t}\\ \mathbf{else}:\\ \;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\ \end{array}\]

Reproduce

herbie shell --seed 2019174 
(FPCore (x y z t)
  :name "Graphics.Rendering.Plot.Render.Plot.Axis:tickPosition from plot-0.2.3.4"

  :herbie-target
  (if (< (* (- y x) (/ z t)) -1013646692435.8867) (+ x (/ (- y x) (/ t z))) (if (< (* (- y x) (/ z t)) -0.0) (+ x (/ (* (- y x) z) t)) (+ x (/ (- y x) (/ t z)))))

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