Average Error: 14.9 → 9.7
Time: 1.1m
Precision: 64
\[x + \left(y - z\right) \cdot \frac{t - x}{a - z}\]
\[\begin{array}{l} \mathbf{if}\;a \le -1.7262808088606156 \cdot 10^{-120}:\\ \;\;\;\;\frac{y}{\frac{a - z}{t - x}} - \left(\frac{z}{a - z} \cdot \left(t - x\right) - x\right)\\ \mathbf{elif}\;a \le 1.5453516653821514 \cdot 10^{-152}:\\ \;\;\;\;\mathsf{fma}\left(y, \frac{x}{z} - \frac{t}{z}, t\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{y}{\frac{a - z}{t - x}} - \left(\frac{z}{a - z} \cdot \left(t - x\right) - x\right)\\ \end{array}\]
x + \left(y - z\right) \cdot \frac{t - x}{a - z}
\begin{array}{l}
\mathbf{if}\;a \le -1.7262808088606156 \cdot 10^{-120}:\\
\;\;\;\;\frac{y}{\frac{a - z}{t - x}} - \left(\frac{z}{a - z} \cdot \left(t - x\right) - x\right)\\

\mathbf{elif}\;a \le 1.5453516653821514 \cdot 10^{-152}:\\
\;\;\;\;\mathsf{fma}\left(y, \frac{x}{z} - \frac{t}{z}, t\right)\\

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r6412091 = x;
        double r6412092 = y;
        double r6412093 = z;
        double r6412094 = r6412092 - r6412093;
        double r6412095 = t;
        double r6412096 = r6412095 - r6412091;
        double r6412097 = a;
        double r6412098 = r6412097 - r6412093;
        double r6412099 = r6412096 / r6412098;
        double r6412100 = r6412094 * r6412099;
        double r6412101 = r6412091 + r6412100;
        return r6412101;
}

double f(double x, double y, double z, double t, double a) {
        double r6412102 = a;
        double r6412103 = -1.7262808088606156e-120;
        bool r6412104 = r6412102 <= r6412103;
        double r6412105 = y;
        double r6412106 = z;
        double r6412107 = r6412102 - r6412106;
        double r6412108 = t;
        double r6412109 = x;
        double r6412110 = r6412108 - r6412109;
        double r6412111 = r6412107 / r6412110;
        double r6412112 = r6412105 / r6412111;
        double r6412113 = r6412106 / r6412107;
        double r6412114 = r6412113 * r6412110;
        double r6412115 = r6412114 - r6412109;
        double r6412116 = r6412112 - r6412115;
        double r6412117 = 1.5453516653821514e-152;
        bool r6412118 = r6412102 <= r6412117;
        double r6412119 = r6412109 / r6412106;
        double r6412120 = r6412108 / r6412106;
        double r6412121 = r6412119 - r6412120;
        double r6412122 = fma(r6412105, r6412121, r6412108);
        double r6412123 = r6412118 ? r6412122 : r6412116;
        double r6412124 = r6412104 ? r6412116 : r6412123;
        return r6412124;
}

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 a < -1.7262808088606156e-120 or 1.5453516653821514e-152 < a

    1. Initial program 11.6

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

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

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

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

      \[\leadsto \color{blue}{\frac{y - z}{\frac{a - z}{t - x}}} + x\]
    8. Using strategy rm
    9. Applied div-sub11.7

      \[\leadsto \color{blue}{\left(\frac{y}{\frac{a - z}{t - x}} - \frac{z}{\frac{a - z}{t - x}}\right)} + x\]
    10. Applied associate-+l-10.5

      \[\leadsto \color{blue}{\frac{y}{\frac{a - z}{t - x}} - \left(\frac{z}{\frac{a - z}{t - x}} - x\right)}\]
    11. Using strategy rm
    12. Applied associate-/r/9.0

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

    if -1.7262808088606156e-120 < a < 1.5453516653821514e-152

    1. Initial program 25.4

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

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

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

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

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

Reproduce

herbie shell --seed 2019165 +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)))))