Average Error: 24.3 → 8.4
Time: 18.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 -1.828093467919815950939216553514049710649 \cdot 10^{-286}:\\ \;\;\;\;\frac{1}{\frac{a}{z - t} - \frac{t}{z - t}} \cdot \left(y - x\right) + x\\ \mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 7.220777503459318304277048324694986155104 \cdot 10^{-276}:\\ \;\;\;\;\left(y + \frac{z \cdot x}{t}\right) - \frac{z \cdot y}{t}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{a}{z - t} - \frac{t}{z - t}} \cdot \left(y - x\right) + x\\ \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 -1.828093467919815950939216553514049710649 \cdot 10^{-286}:\\
\;\;\;\;\frac{1}{\frac{a}{z - t} - \frac{t}{z - t}} \cdot \left(y - x\right) + x\\

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

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r32244176 = x;
        double r32244177 = y;
        double r32244178 = r32244177 - r32244176;
        double r32244179 = z;
        double r32244180 = t;
        double r32244181 = r32244179 - r32244180;
        double r32244182 = r32244178 * r32244181;
        double r32244183 = a;
        double r32244184 = r32244183 - r32244180;
        double r32244185 = r32244182 / r32244184;
        double r32244186 = r32244176 + r32244185;
        return r32244186;
}

double f(double x, double y, double z, double t, double a) {
        double r32244187 = x;
        double r32244188 = y;
        double r32244189 = r32244188 - r32244187;
        double r32244190 = z;
        double r32244191 = t;
        double r32244192 = r32244190 - r32244191;
        double r32244193 = r32244189 * r32244192;
        double r32244194 = a;
        double r32244195 = r32244194 - r32244191;
        double r32244196 = r32244193 / r32244195;
        double r32244197 = r32244187 + r32244196;
        double r32244198 = -1.828093467919816e-286;
        bool r32244199 = r32244197 <= r32244198;
        double r32244200 = 1.0;
        double r32244201 = r32244194 / r32244192;
        double r32244202 = r32244191 / r32244192;
        double r32244203 = r32244201 - r32244202;
        double r32244204 = r32244200 / r32244203;
        double r32244205 = r32244204 * r32244189;
        double r32244206 = r32244205 + r32244187;
        double r32244207 = 7.220777503459318e-276;
        bool r32244208 = r32244197 <= r32244207;
        double r32244209 = r32244190 * r32244187;
        double r32244210 = r32244209 / r32244191;
        double r32244211 = r32244188 + r32244210;
        double r32244212 = r32244190 * r32244188;
        double r32244213 = r32244212 / r32244191;
        double r32244214 = r32244211 - r32244213;
        double r32244215 = r32244208 ? r32244214 : r32244206;
        double r32244216 = r32244199 ? r32244206 : r32244215;
        return r32244216;
}

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.3
Target9.2
Herbie8.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 (+ x (/ (* (- y x) (- z t)) (- a t))) < -1.828093467919816e-286 or 7.220777503459318e-276 < (+ x (/ (* (- y x) (- z t)) (- a t)))

    1. Initial program 21.2

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

      \[\leadsto x + \color{blue}{\frac{y - x}{\frac{a - t}{z - t}}}\]
    4. Using strategy rm
    5. Applied div-sub7.1

      \[\leadsto x + \frac{y - x}{\color{blue}{\frac{a}{z - t} - \frac{t}{z - t}}}\]
    6. Using strategy rm
    7. Applied div-inv7.2

      \[\leadsto x + \color{blue}{\left(y - x\right) \cdot \frac{1}{\frac{a}{z - t} - \frac{t}{z - t}}}\]

    if -1.828093467919816e-286 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 7.220777503459318e-276

    1. Initial program 58.0

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

      \[\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 simplification8.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -1.828093467919815950939216553514049710649 \cdot 10^{-286}:\\ \;\;\;\;\frac{1}{\frac{a}{z - t} - \frac{t}{z - t}} \cdot \left(y - x\right) + x\\ \mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 7.220777503459318304277048324694986155104 \cdot 10^{-276}:\\ \;\;\;\;\left(y + \frac{z \cdot x}{t}\right) - \frac{z \cdot y}{t}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{a}{z - t} - \frac{t}{z - t}} \cdot \left(y - x\right) + x\\ \end{array}\]

Reproduce

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

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

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