x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;t \le -1.027661730382195228081271715965029345188 \cdot 10^{221}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{t}, z, y\right) - y \cdot \frac{z}{t}\\
\mathbf{elif}\;t \le 8.607493713748229750335448676382364722526 \cdot 10^{142}:\\
\;\;\;\;\mathsf{fma}\left(\left(\frac{z}{a - t} - \frac{\frac{t}{\sqrt[3]{a - t}}}{\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}}\right) + \mathsf{fma}\left(\frac{\frac{\sqrt[3]{t} \cdot \sqrt[3]{t}}{\sqrt[3]{\sqrt[3]{a - t}} \cdot \sqrt[3]{\sqrt[3]{a - t}}}}{\sqrt[3]{a - t}}, \frac{-\frac{\sqrt[3]{t}}{\sqrt[3]{\sqrt[3]{a - t}}}}{\sqrt[3]{a - t}}, \frac{\frac{t}{\sqrt[3]{a - t}}}{\sqrt[3]{a - t} \cdot \left(\left(\sqrt[3]{\sqrt[3]{a - t}} \cdot \sqrt[3]{\sqrt[3]{a - t}}\right) \cdot \sqrt[3]{\sqrt[3]{a - t}}\right)}\right), y - x, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{x}{t}, z, y\right) - y \cdot \frac{z}{t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r26597948 = x;
double r26597949 = y;
double r26597950 = r26597949 - r26597948;
double r26597951 = z;
double r26597952 = t;
double r26597953 = r26597951 - r26597952;
double r26597954 = r26597950 * r26597953;
double r26597955 = a;
double r26597956 = r26597955 - r26597952;
double r26597957 = r26597954 / r26597956;
double r26597958 = r26597948 + r26597957;
return r26597958;
}
double f(double x, double y, double z, double t, double a) {
double r26597959 = t;
double r26597960 = -1.0276617303821952e+221;
bool r26597961 = r26597959 <= r26597960;
double r26597962 = x;
double r26597963 = r26597962 / r26597959;
double r26597964 = z;
double r26597965 = y;
double r26597966 = fma(r26597963, r26597964, r26597965);
double r26597967 = r26597964 / r26597959;
double r26597968 = r26597965 * r26597967;
double r26597969 = r26597966 - r26597968;
double r26597970 = 8.60749371374823e+142;
bool r26597971 = r26597959 <= r26597970;
double r26597972 = a;
double r26597973 = r26597972 - r26597959;
double r26597974 = r26597964 / r26597973;
double r26597975 = cbrt(r26597973);
double r26597976 = r26597959 / r26597975;
double r26597977 = r26597975 * r26597975;
double r26597978 = r26597976 / r26597977;
double r26597979 = r26597974 - r26597978;
double r26597980 = cbrt(r26597959);
double r26597981 = r26597980 * r26597980;
double r26597982 = cbrt(r26597975);
double r26597983 = r26597982 * r26597982;
double r26597984 = r26597981 / r26597983;
double r26597985 = r26597984 / r26597975;
double r26597986 = r26597980 / r26597982;
double r26597987 = -r26597986;
double r26597988 = r26597987 / r26597975;
double r26597989 = r26597983 * r26597982;
double r26597990 = r26597975 * r26597989;
double r26597991 = r26597976 / r26597990;
double r26597992 = fma(r26597985, r26597988, r26597991);
double r26597993 = r26597979 + r26597992;
double r26597994 = r26597965 - r26597962;
double r26597995 = fma(r26597993, r26597994, r26597962);
double r26597996 = r26597971 ? r26597995 : r26597969;
double r26597997 = r26597961 ? r26597969 : r26597996;
return r26597997;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.3 |
|---|---|
| Target | 9.5 |
| Herbie | 9.9 |
if t < -1.0276617303821952e+221 or 8.60749371374823e+142 < t Initial program 48.6
Simplified23.8
Taylor expanded around inf 24.7
Simplified15.7
if -1.0276617303821952e+221 < t < 8.60749371374823e+142Initial program 16.6
Simplified7.9
rmApplied div-sub7.9
rmApplied add-cube-cbrt8.1
Applied *-un-lft-identity8.1
Applied times-frac8.1
Applied add-sqr-sqrt31.0
Applied prod-diff31.0
Simplified8.1
Simplified8.1
rmApplied add-cube-cbrt8.2
rmApplied add-cube-cbrt8.1
Applied add-cube-cbrt8.0
Applied times-frac8.0
Applied times-frac8.0
Applied distribute-rgt-neg-in8.0
Applied fma-def8.0
Final simplification9.9
herbie shell --seed 2019192 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1.0) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))