x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} = -\infty:\\
\;\;\;\;\mathsf{fma}\left(\left(y - x\right) \cdot \frac{1}{a - t}, z - t, x\right)\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le -3.75564871917852029 \cdot 10^{-299}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 0.0:\\
\;\;\;\;y\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t} \le 3.6671185442121014 \cdot 10^{307}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot \left(z - t\right)}{a - t}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(\sqrt[3]{\frac{y - x}{a - t}} \cdot \left(\sqrt[3]{\frac{\sqrt[3]{y - x} \cdot \sqrt[3]{y - x}}{\sqrt[3]{a - t} \cdot \sqrt[3]{a - t}}} \cdot \sqrt[3]{\frac{\sqrt[3]{y - x}}{\sqrt[3]{a - t}}}\right)\right) \cdot \sqrt[3]{\frac{y - x}{a - t}}, z - t, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r635901 = x;
double r635902 = y;
double r635903 = r635902 - r635901;
double r635904 = z;
double r635905 = t;
double r635906 = r635904 - r635905;
double r635907 = r635903 * r635906;
double r635908 = a;
double r635909 = r635908 - r635905;
double r635910 = r635907 / r635909;
double r635911 = r635901 + r635910;
return r635911;
}
double f(double x, double y, double z, double t, double a) {
double r635912 = x;
double r635913 = y;
double r635914 = r635913 - r635912;
double r635915 = z;
double r635916 = t;
double r635917 = r635915 - r635916;
double r635918 = r635914 * r635917;
double r635919 = a;
double r635920 = r635919 - r635916;
double r635921 = r635918 / r635920;
double r635922 = r635912 + r635921;
double r635923 = -inf.0;
bool r635924 = r635922 <= r635923;
double r635925 = 1.0;
double r635926 = r635925 / r635920;
double r635927 = r635914 * r635926;
double r635928 = fma(r635927, r635917, r635912);
double r635929 = -3.7556487191785203e-299;
bool r635930 = r635922 <= r635929;
double r635931 = 0.0;
bool r635932 = r635922 <= r635931;
double r635933 = 3.6671185442121014e+307;
bool r635934 = r635922 <= r635933;
double r635935 = r635914 / r635920;
double r635936 = cbrt(r635935);
double r635937 = cbrt(r635914);
double r635938 = r635937 * r635937;
double r635939 = cbrt(r635920);
double r635940 = r635939 * r635939;
double r635941 = r635938 / r635940;
double r635942 = cbrt(r635941);
double r635943 = r635937 / r635939;
double r635944 = cbrt(r635943);
double r635945 = r635942 * r635944;
double r635946 = r635936 * r635945;
double r635947 = r635946 * r635936;
double r635948 = fma(r635947, r635917, r635912);
double r635949 = r635934 ? r635922 : r635948;
double r635950 = r635932 ? r635913 : r635949;
double r635951 = r635930 ? r635922 : r635950;
double r635952 = r635924 ? r635928 : r635951;
return r635952;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 24.9 |
|---|---|
| Target | 9.3 |
| Herbie | 9.3 |
if (+ x (/ (* (- y x) (- z t)) (- a t))) < -inf.0Initial program 64.0
Simplified17.0
rmApplied div-inv17.1
if -inf.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) < -3.7556487191785203e-299 or 0.0 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 3.6671185442121014e+307Initial program 2.0
if -3.7556487191785203e-299 < (+ x (/ (* (- y x) (- z t)) (- a t))) < 0.0Initial program 60.7
Simplified60.9
Taylor expanded around 0 34.4
if 3.6671185442121014e+307 < (+ x (/ (* (- y x) (- z t)) (- a t))) Initial program 63.9
Simplified17.6
rmApplied add-cube-cbrt18.5
rmApplied add-cube-cbrt18.4
Applied add-cube-cbrt18.4
Applied times-frac18.4
Applied cbrt-prod18.4
Final simplification9.3
herbie shell --seed 2020036 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:linMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< a -1.6153062845442575e-142) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t)))) (if (< a 3.774403170083174e-182) (- y (* (/ z t) (- y x))) (+ x (* (/ (- y x) 1) (/ (- z t) (- a t))))))
(+ x (/ (* (- y x) (- z t)) (- a t))))