Average Error: 24.7 → 7.8
Time: 13.6s
Precision: 64
\[x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\]
\[\begin{array}{l} \mathbf{if}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -3.258607955856815675452392884400684456731 \cdot 10^{-306} \lor \neg \left(x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0\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}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -3.258607955856815675452392884400684456731 \cdot 10^{-306} \lor \neg \left(x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0\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 r579536 = x;
        double r579537 = y;
        double r579538 = r579537 - r579536;
        double r579539 = z;
        double r579540 = t;
        double r579541 = r579539 - r579540;
        double r579542 = r579538 * r579541;
        double r579543 = a;
        double r579544 = r579543 - r579540;
        double r579545 = r579542 / r579544;
        double r579546 = r579536 + r579545;
        return r579546;
}

double f(double x, double y, double z, double t, double a) {
        double r579547 = x;
        double r579548 = y;
        double r579549 = r579548 - r579547;
        double r579550 = z;
        double r579551 = t;
        double r579552 = r579550 - r579551;
        double r579553 = r579549 * r579552;
        double r579554 = a;
        double r579555 = r579554 - r579551;
        double r579556 = r579553 / r579555;
        double r579557 = r579547 + r579556;
        double r579558 = -3.2586079558568157e-306;
        bool r579559 = r579557 <= r579558;
        double r579560 = 0.0;
        bool r579561 = r579557 <= r579560;
        double r579562 = !r579561;
        bool r579563 = r579559 || r579562;
        double r579564 = r579555 / r579552;
        double r579565 = r579549 / r579564;
        double r579566 = r579547 + r579565;
        double r579567 = r579547 * r579550;
        double r579568 = r579567 / r579551;
        double r579569 = r579548 + r579568;
        double r579570 = r579550 * r579548;
        double r579571 = r579570 / r579551;
        double r579572 = r579569 - r579571;
        double r579573 = r579563 ? r579566 : r579572;
        return r579573;
}

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.1
Herbie7.8
\[\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 (+ x (/ (* (- y x) (- z t)) (- a t))) < -3.2586079558568157e-306 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t)))

    1. Initial program 21.4

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

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

    if -3.2586079558568157e-306 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0

    1. Initial program 61.0

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

      \[\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 simplification7.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -3.258607955856815675452392884400684456731 \cdot 10^{-306} \lor \neg \left(x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0\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 2019291 
(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))))