Average Error: 24.7 → 10.5
Time: 17.7s
Precision: 64
\[x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\]
\[\begin{array}{l} \mathbf{if}\;a \le -4.211820321936384636273904047695058007751 \cdot 10^{-164} \lor \neg \left(a \le 9.038357837464358105879828645568363291679 \cdot 10^{-170}\right):\\ \;\;\;\;x + \frac{y - x}{\frac{a - t}{z - t}}\\ \mathbf{else}:\\ \;\;\;\;\left(y + \frac{x \cdot z}{t}\right) - \frac{z \cdot y}{t}\\ \end{array}\]
x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}
\begin{array}{l}
\mathbf{if}\;a \le -4.211820321936384636273904047695058007751 \cdot 10^{-164} \lor \neg \left(a \le 9.038357837464358105879828645568363291679 \cdot 10^{-170}\right):\\
\;\;\;\;x + \frac{y - x}{\frac{a - t}{z - t}}\\

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r440101 = x;
        double r440102 = y;
        double r440103 = r440102 - r440101;
        double r440104 = z;
        double r440105 = t;
        double r440106 = r440104 - r440105;
        double r440107 = r440103 * r440106;
        double r440108 = a;
        double r440109 = r440108 - r440105;
        double r440110 = r440107 / r440109;
        double r440111 = r440101 + r440110;
        return r440111;
}

double f(double x, double y, double z, double t, double a) {
        double r440112 = a;
        double r440113 = -4.211820321936385e-164;
        bool r440114 = r440112 <= r440113;
        double r440115 = 9.038357837464358e-170;
        bool r440116 = r440112 <= r440115;
        double r440117 = !r440116;
        bool r440118 = r440114 || r440117;
        double r440119 = x;
        double r440120 = y;
        double r440121 = r440120 - r440119;
        double r440122 = t;
        double r440123 = r440112 - r440122;
        double r440124 = z;
        double r440125 = r440124 - r440122;
        double r440126 = r440123 / r440125;
        double r440127 = r440121 / r440126;
        double r440128 = r440119 + r440127;
        double r440129 = r440119 * r440124;
        double r440130 = r440129 / r440122;
        double r440131 = r440120 + r440130;
        double r440132 = r440124 * r440120;
        double r440133 = r440132 / r440122;
        double r440134 = r440131 - r440133;
        double r440135 = r440118 ? r440128 : r440134;
        return r440135;
}

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

Original24.7
Target9.6
Herbie10.5
\[\begin{array}{l} \mathbf{if}\;a \lt -1.615306284544257464183904494091872805513 \cdot 10^{-142}:\\ \;\;\;\;x + \frac{y - x}{1} \cdot \frac{z - t}{a - t}\\ \mathbf{elif}\;a \lt 3.774403170083174201868024161554637965035 \cdot 10^{-182}:\\ \;\;\;\;y - \frac{z}{t} \cdot \left(y - x\right)\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y - x}{1} \cdot \frac{z - t}{a - t}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if a < -4.211820321936385e-164 or 9.038357837464358e-170 < a

    1. Initial program 23.7

      \[x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\]
    2. Using strategy rm
    3. Applied associate-/l*9.9

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

    if -4.211820321936385e-164 < a < 9.038357837464358e-170

    1. Initial program 28.5

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

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

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

Reproduce

herbie shell --seed 2019212 
(FPCore (x y z t a)
  :name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
  :precision binary64

  :herbie-target
  (if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t)))) (if (< a 3.7744031700831742e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))

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