x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\begin{array}{l}
\mathbf{if}\;a \le -9.775356164441544470158858032480564423106 \cdot 10^{-50} \lor \neg \left(a \le 2.555615459190409481576440428568032248898 \cdot 10^{-179}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{a - z} \cdot \left(y - z\right), t - x, x\right)\\
\mathbf{else}:\\
\;\;\;\;y \cdot \left(\frac{x}{z} - \frac{t}{z}\right) + t\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r418035 = x;
double r418036 = y;
double r418037 = z;
double r418038 = r418036 - r418037;
double r418039 = t;
double r418040 = r418039 - r418035;
double r418041 = r418038 * r418040;
double r418042 = a;
double r418043 = r418042 - r418037;
double r418044 = r418041 / r418043;
double r418045 = r418035 + r418044;
return r418045;
}
double f(double x, double y, double z, double t, double a) {
double r418046 = a;
double r418047 = -9.775356164441544e-50;
bool r418048 = r418046 <= r418047;
double r418049 = 2.5556154591904095e-179;
bool r418050 = r418046 <= r418049;
double r418051 = !r418050;
bool r418052 = r418048 || r418051;
double r418053 = 1.0;
double r418054 = z;
double r418055 = r418046 - r418054;
double r418056 = r418053 / r418055;
double r418057 = y;
double r418058 = r418057 - r418054;
double r418059 = r418056 * r418058;
double r418060 = t;
double r418061 = x;
double r418062 = r418060 - r418061;
double r418063 = fma(r418059, r418062, r418061);
double r418064 = r418061 / r418054;
double r418065 = r418060 / r418054;
double r418066 = r418064 - r418065;
double r418067 = r418057 * r418066;
double r418068 = r418067 + r418060;
double r418069 = r418052 ? r418063 : r418068;
return r418069;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 23.8 |
|---|---|
| Target | 11.4 |
| Herbie | 10.1 |
if a < -9.775356164441544e-50 or 2.5556154591904095e-179 < a Initial program 21.9
Simplified8.2
rmApplied div-inv8.3
if -9.775356164441544e-50 < a < 2.5556154591904095e-179Initial program 28.5
Simplified19.1
Taylor expanded around inf 16.9
Simplified14.4
Final simplification10.1
herbie shell --seed 2019179 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
:herbie-target
(if (< z -1.2536131056095036e+188) (- t (* (/ y z) (- t x))) (if (< z 4.446702369113811e+64) (+ x (/ (- y z) (/ (- a z) (- t x)))) (- t (* (/ y z) (- t x)))))
(+ x (/ (* (- y z) (- t x)) (- a z))))