Average Error: 24.0 → 10.4
Time: 15.4s
Precision: 64
\[x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\]
\[\begin{array}{l} \mathbf{if}\;a \le -1.303506817302349080455228760291567734794 \cdot 10^{-200} \lor \neg \left(a \le 8.391913332199526304901558027644248232146 \cdot 10^{-123}\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 -1.303506817302349080455228760291567734794 \cdot 10^{-200} \lor \neg \left(a \le 8.391913332199526304901558027644248232146 \cdot 10^{-123}\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 r372193 = x;
        double r372194 = y;
        double r372195 = r372194 - r372193;
        double r372196 = z;
        double r372197 = t;
        double r372198 = r372196 - r372197;
        double r372199 = r372195 * r372198;
        double r372200 = a;
        double r372201 = r372200 - r372197;
        double r372202 = r372199 / r372201;
        double r372203 = r372193 + r372202;
        return r372203;
}

double f(double x, double y, double z, double t, double a) {
        double r372204 = a;
        double r372205 = -1.3035068173023491e-200;
        bool r372206 = r372204 <= r372205;
        double r372207 = 8.391913332199526e-123;
        bool r372208 = r372204 <= r372207;
        double r372209 = !r372208;
        bool r372210 = r372206 || r372209;
        double r372211 = x;
        double r372212 = y;
        double r372213 = r372212 - r372211;
        double r372214 = t;
        double r372215 = r372204 - r372214;
        double r372216 = z;
        double r372217 = r372216 - r372214;
        double r372218 = r372215 / r372217;
        double r372219 = r372213 / r372218;
        double r372220 = r372211 + r372219;
        double r372221 = r372211 * r372216;
        double r372222 = r372221 / r372214;
        double r372223 = r372212 + r372222;
        double r372224 = r372216 * r372212;
        double r372225 = r372224 / r372214;
        double r372226 = r372223 - r372225;
        double r372227 = r372210 ? r372220 : r372226;
        return r372227;
}

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.0
Target9.3
Herbie10.4
\[\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 < -1.3035068173023491e-200 or 8.391913332199526e-123 < a

    1. Initial program 22.8

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

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

    if -1.3035068173023491e-200 < a < 8.391913332199526e-123

    1. Initial program 28.3

      \[x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\]
    2. Taylor expanded around inf 13.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.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -1.303506817302349080455228760291567734794 \cdot 10^{-200} \lor \neg \left(a \le 8.391913332199526304901558027644248232146 \cdot 10^{-123}\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 2019298 
(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))))