x + \left(y - z\right) \cdot \frac{t - x}{a - z}\begin{array}{l}
\mathbf{if}\;z \le -9.629551716185815802079564146219277537856 \cdot 10^{108} \lor \neg \left(z \le 1.899992387810078819800897324896277379132 \cdot 10^{186}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{z}, y, t - \frac{t \cdot y}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{t - x}{a - z}, y - z, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r82905 = x;
double r82906 = y;
double r82907 = z;
double r82908 = r82906 - r82907;
double r82909 = t;
double r82910 = r82909 - r82905;
double r82911 = a;
double r82912 = r82911 - r82907;
double r82913 = r82910 / r82912;
double r82914 = r82908 * r82913;
double r82915 = r82905 + r82914;
return r82915;
}
double f(double x, double y, double z, double t, double a) {
double r82916 = z;
double r82917 = -9.629551716185816e+108;
bool r82918 = r82916 <= r82917;
double r82919 = 1.8999923878100788e+186;
bool r82920 = r82916 <= r82919;
double r82921 = !r82920;
bool r82922 = r82918 || r82921;
double r82923 = x;
double r82924 = r82923 / r82916;
double r82925 = y;
double r82926 = t;
double r82927 = r82926 * r82925;
double r82928 = r82927 / r82916;
double r82929 = r82926 - r82928;
double r82930 = fma(r82924, r82925, r82929);
double r82931 = r82926 - r82923;
double r82932 = a;
double r82933 = r82932 - r82916;
double r82934 = r82931 / r82933;
double r82935 = r82925 - r82916;
double r82936 = fma(r82934, r82935, r82923);
double r82937 = r82922 ? r82930 : r82936;
return r82937;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus t



Bits error versus a
if z < -9.629551716185816e+108 or 1.8999923878100788e+186 < z Initial program 28.3
Taylor expanded around inf 25.7
Simplified22.3
if -9.629551716185816e+108 < z < 1.8999923878100788e+186Initial program 9.6
Simplified9.5
rmApplied div-inv9.6
rmApplied pow19.6
Applied pow19.6
Applied pow-prod-down9.6
Simplified9.5
Final simplification13.3
herbie shell --seed 2019347 +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)))))