Average Error: 14.7 → 13.9
Time: 21.1s
Precision: 64
\[x + \left(y - z\right) \cdot \frac{t - x}{a - z}\]
\[\begin{array}{l} \mathbf{if}\;z \le 4.414999570783422340397446628721574989275 \cdot 10^{213}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{a - z} \cdot \left(t - x\right), y - z, x\right)\\ \mathbf{else}:\\ \;\;\;\;t\\ \end{array}\]
x + \left(y - z\right) \cdot \frac{t - x}{a - z}
\begin{array}{l}
\mathbf{if}\;z \le 4.414999570783422340397446628721574989275 \cdot 10^{213}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{a - z} \cdot \left(t - x\right), y - z, x\right)\\

\mathbf{else}:\\
\;\;\;\;t\\

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r118197 = x;
        double r118198 = y;
        double r118199 = z;
        double r118200 = r118198 - r118199;
        double r118201 = t;
        double r118202 = r118201 - r118197;
        double r118203 = a;
        double r118204 = r118203 - r118199;
        double r118205 = r118202 / r118204;
        double r118206 = r118200 * r118205;
        double r118207 = r118197 + r118206;
        return r118207;
}

double f(double x, double y, double z, double t, double a) {
        double r118208 = z;
        double r118209 = 4.4149995707834223e+213;
        bool r118210 = r118208 <= r118209;
        double r118211 = 1.0;
        double r118212 = a;
        double r118213 = r118212 - r118208;
        double r118214 = r118211 / r118213;
        double r118215 = t;
        double r118216 = x;
        double r118217 = r118215 - r118216;
        double r118218 = r118214 * r118217;
        double r118219 = y;
        double r118220 = r118219 - r118208;
        double r118221 = fma(r118218, r118220, r118216);
        double r118222 = r118210 ? r118221 : r118215;
        return r118222;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Derivation

  1. Split input into 2 regimes
  2. if z < 4.4149995707834223e+213

    1. Initial program 12.9

      \[x + \left(y - z\right) \cdot \frac{t - x}{a - z}\]
    2. Simplified12.8

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{t - x}{a - z}, y - z, x\right)}\]
    3. Using strategy rm
    4. Applied div-inv12.9

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

    if 4.4149995707834223e+213 < z

    1. Initial program 32.1

      \[x + \left(y - z\right) \cdot \frac{t - x}{a - z}\]
    2. Simplified32.0

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{t - x}{a - z}, y - z, x\right)}\]
    3. Taylor expanded around 0 23.6

      \[\leadsto \color{blue}{t}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification13.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le 4.414999570783422340397446628721574989275 \cdot 10^{213}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{a - z} \cdot \left(t - x\right), y - z, x\right)\\ \mathbf{else}:\\ \;\;\;\;t\\ \end{array}\]

Reproduce

herbie shell --seed 2019174 +o rules:numerics
(FPCore (x y z t a)
  :name "Numeric.Signal:interpolate   from hsignal-0.2.7.1"
  (+ x (* (- y z) (/ (- t x) (- a z)))))