Average Error: 14.5 → 12.3
Time: 18.4s
Precision: 64
\[x + \left(y - z\right) \cdot \frac{t - x}{a - z}\]
\[\begin{array}{l} \mathbf{if}\;a \le -9.16612252681064813 \cdot 10^{-164}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{\frac{a}{t - x} - \frac{z}{t - x}}, y - z, x\right)\\ \mathbf{elif}\;a \le 2.8169560441423619 \cdot 10^{-147}:\\ \;\;\;\;\left(\frac{x \cdot y}{z} + t\right) - \frac{t \cdot y}{z}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{\frac{1}{a - z}}{\frac{1}{t - x}}, y - z, x\right)\\ \end{array}\]
x + \left(y - z\right) \cdot \frac{t - x}{a - z}
\begin{array}{l}
\mathbf{if}\;a \le -9.16612252681064813 \cdot 10^{-164}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{\frac{a}{t - x} - \frac{z}{t - x}}, y - z, x\right)\\

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

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\frac{1}{a - z}}{\frac{1}{t - x}}, y - z, x\right)\\

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r117607 = x;
        double r117608 = y;
        double r117609 = z;
        double r117610 = r117608 - r117609;
        double r117611 = t;
        double r117612 = r117611 - r117607;
        double r117613 = a;
        double r117614 = r117613 - r117609;
        double r117615 = r117612 / r117614;
        double r117616 = r117610 * r117615;
        double r117617 = r117607 + r117616;
        return r117617;
}

double f(double x, double y, double z, double t, double a) {
        double r117618 = a;
        double r117619 = -9.166122526810648e-164;
        bool r117620 = r117618 <= r117619;
        double r117621 = 1.0;
        double r117622 = t;
        double r117623 = x;
        double r117624 = r117622 - r117623;
        double r117625 = r117618 / r117624;
        double r117626 = z;
        double r117627 = r117626 / r117624;
        double r117628 = r117625 - r117627;
        double r117629 = r117621 / r117628;
        double r117630 = y;
        double r117631 = r117630 - r117626;
        double r117632 = fma(r117629, r117631, r117623);
        double r117633 = 2.816956044142362e-147;
        bool r117634 = r117618 <= r117633;
        double r117635 = r117623 * r117630;
        double r117636 = r117635 / r117626;
        double r117637 = r117636 + r117622;
        double r117638 = r117622 * r117630;
        double r117639 = r117638 / r117626;
        double r117640 = r117637 - r117639;
        double r117641 = r117618 - r117626;
        double r117642 = r117621 / r117641;
        double r117643 = r117621 / r117624;
        double r117644 = r117642 / r117643;
        double r117645 = fma(r117644, r117631, r117623);
        double r117646 = r117634 ? r117640 : r117645;
        double r117647 = r117620 ? r117632 : r117646;
        return r117647;
}

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 3 regimes
  2. if a < -9.166122526810648e-164

    1. Initial program 12.3

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

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

      \[\leadsto \mathsf{fma}\left(\color{blue}{\frac{1}{\frac{a - z}{t - x}}}, y - z, x\right)\]
    5. Using strategy rm
    6. Applied div-sub12.7

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

    if -9.166122526810648e-164 < a < 2.816956044142362e-147

    1. Initial program 24.5

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

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

    if 2.816956044142362e-147 < a

    1. Initial program 11.2

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

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

      \[\leadsto \mathsf{fma}\left(\color{blue}{\frac{1}{\frac{a - z}{t - x}}}, y - z, x\right)\]
    5. Using strategy rm
    6. Applied div-inv11.5

      \[\leadsto \mathsf{fma}\left(\frac{1}{\color{blue}{\left(a - z\right) \cdot \frac{1}{t - x}}}, y - z, x\right)\]
    7. Applied associate-/r*11.3

      \[\leadsto \mathsf{fma}\left(\color{blue}{\frac{\frac{1}{a - z}}{\frac{1}{t - x}}}, y - z, x\right)\]
  3. Recombined 3 regimes into one program.
  4. Final simplification12.3

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

Reproduce

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