\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k
\begin{array}{l}
\mathbf{if}\;z \le -3.6888285353026094 \cdot 10^{97} \lor \neg \left(z \le 4.5937779867099482 \cdot 10^{-105}\right):\\
\;\;\;\;\mathsf{fma}\left(t, \left(\left(x \cdot 18\right) \cdot y\right) \cdot z - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, j \cdot \left(27 \cdot k\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(t, \left(x \cdot 18\right) \cdot \left(y \cdot z\right) - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, \left(j \cdot 27\right) \cdot k\right)\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r756805 = x;
double r756806 = 18.0;
double r756807 = r756805 * r756806;
double r756808 = y;
double r756809 = r756807 * r756808;
double r756810 = z;
double r756811 = r756809 * r756810;
double r756812 = t;
double r756813 = r756811 * r756812;
double r756814 = a;
double r756815 = 4.0;
double r756816 = r756814 * r756815;
double r756817 = r756816 * r756812;
double r756818 = r756813 - r756817;
double r756819 = b;
double r756820 = c;
double r756821 = r756819 * r756820;
double r756822 = r756818 + r756821;
double r756823 = r756805 * r756815;
double r756824 = i;
double r756825 = r756823 * r756824;
double r756826 = r756822 - r756825;
double r756827 = j;
double r756828 = 27.0;
double r756829 = r756827 * r756828;
double r756830 = k;
double r756831 = r756829 * r756830;
double r756832 = r756826 - r756831;
return r756832;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r756833 = z;
double r756834 = -3.688828535302609e+97;
bool r756835 = r756833 <= r756834;
double r756836 = 4.593777986709948e-105;
bool r756837 = r756833 <= r756836;
double r756838 = !r756837;
bool r756839 = r756835 || r756838;
double r756840 = t;
double r756841 = x;
double r756842 = 18.0;
double r756843 = r756841 * r756842;
double r756844 = y;
double r756845 = r756843 * r756844;
double r756846 = r756845 * r756833;
double r756847 = a;
double r756848 = 4.0;
double r756849 = r756847 * r756848;
double r756850 = r756846 - r756849;
double r756851 = b;
double r756852 = c;
double r756853 = r756851 * r756852;
double r756854 = i;
double r756855 = r756848 * r756854;
double r756856 = j;
double r756857 = 27.0;
double r756858 = k;
double r756859 = r756857 * r756858;
double r756860 = r756856 * r756859;
double r756861 = fma(r756841, r756855, r756860);
double r756862 = r756853 - r756861;
double r756863 = fma(r756840, r756850, r756862);
double r756864 = r756844 * r756833;
double r756865 = r756843 * r756864;
double r756866 = r756865 - r756849;
double r756867 = r756856 * r756857;
double r756868 = r756867 * r756858;
double r756869 = fma(r756841, r756855, r756868);
double r756870 = r756853 - r756869;
double r756871 = fma(r756840, r756866, r756870);
double r756872 = r756839 ? r756863 : r756871;
return r756872;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b




Bits error versus c




Bits error versus i




Bits error versus j




Bits error versus k
| Original | 5.8 |
|---|---|
| Target | 1.7 |
| Herbie | 4.2 |
if z < -3.688828535302609e+97 or 4.593777986709948e-105 < z Initial program 6.8
Simplified6.9
rmApplied associate-*l*6.9
if -3.688828535302609e+97 < z < 4.593777986709948e-105Initial program 4.9
Simplified5.0
rmApplied associate-*l*2.0
Final simplification4.2
herbie shell --seed 2020065 +o rules:numerics
(FPCore (x y z t a b c i j k)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, E"
:precision binary64
:herbie-target
(if (< t -1.6210815397541398e-69) (- (- (* (* 18 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4)) (- (* (* k j) 27) (* c b))) (if (< t 165.68027943805222) (+ (- (* (* 18 y) (* x (* z t))) (* (+ (* a t) (* i x)) 4)) (- (* c b) (* 27 (* k j)))) (- (- (* (* 18 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4)) (- (* (* k j) 27) (* c b)))))
(- (- (+ (- (* (* (* (* x 18) y) z) t) (* (* a 4) t)) (* b c)) (* (* x 4) i)) (* (* j 27) k)))