Average Error: 24.1 → 10.5
Time: 6.1s
Precision: 64
\[x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\]
\[\begin{array}{l} \mathbf{if}\;a \le -3.21810197697967915 \cdot 10^{-298} \lor \neg \left(a \le 1.7888988399164032 \cdot 10^{-210}\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 -3.21810197697967915 \cdot 10^{-298} \lor \neg \left(a \le 1.7888988399164032 \cdot 10^{-210}\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 r764169 = x;
        double r764170 = y;
        double r764171 = r764170 - r764169;
        double r764172 = z;
        double r764173 = t;
        double r764174 = r764172 - r764173;
        double r764175 = r764171 * r764174;
        double r764176 = a;
        double r764177 = r764176 - r764173;
        double r764178 = r764175 / r764177;
        double r764179 = r764169 + r764178;
        return r764179;
}

double f(double x, double y, double z, double t, double a) {
        double r764180 = a;
        double r764181 = -3.218101976979679e-298;
        bool r764182 = r764180 <= r764181;
        double r764183 = 1.7888988399164032e-210;
        bool r764184 = r764180 <= r764183;
        double r764185 = !r764184;
        bool r764186 = r764182 || r764185;
        double r764187 = x;
        double r764188 = y;
        double r764189 = r764188 - r764187;
        double r764190 = t;
        double r764191 = r764180 - r764190;
        double r764192 = z;
        double r764193 = r764192 - r764190;
        double r764194 = r764191 / r764193;
        double r764195 = r764189 / r764194;
        double r764196 = r764187 + r764195;
        double r764197 = r764187 * r764192;
        double r764198 = r764197 / r764190;
        double r764199 = r764188 + r764198;
        double r764200 = r764192 * r764188;
        double r764201 = r764200 / r764190;
        double r764202 = r764199 - r764201;
        double r764203 = r764186 ? r764196 : r764202;
        return r764203;
}

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.1
Target9.0
Herbie10.5
\[\begin{array}{l} \mathbf{if}\;a \lt -1.6153062845442575 \cdot 10^{-142}:\\ \;\;\;\;x + \frac{y - x}{1} \cdot \frac{z - t}{a - t}\\ \mathbf{elif}\;a \lt 3.7744031700831742 \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 < -3.218101976979679e-298 or 1.7888988399164032e-210 < 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*10.7

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

    if -3.218101976979679e-298 < a < 1.7888988399164032e-210

    1. Initial program 29.3

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

      \[\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 -3.21810197697967915 \cdot 10^{-298} \lor \neg \left(a \le 1.7888988399164032 \cdot 10^{-210}\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 2020062 
(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.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))

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