\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}\;x \le -2.056417521339258901908501882338352385918 \cdot 10^{-78} \lor \neg \left(x \le 8052446072453817947468355421429087338496\right):\\
\;\;\;\;\left(\left(\left(\left(x \cdot 18\right) \cdot \left(y \cdot \left(t \cdot z\right)\right) - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(27 \cdot k\right) \cdot j\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot t\right) \cdot z - \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\\
\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 r478772 = x;
double r478773 = 18.0;
double r478774 = r478772 * r478773;
double r478775 = y;
double r478776 = r478774 * r478775;
double r478777 = z;
double r478778 = r478776 * r478777;
double r478779 = t;
double r478780 = r478778 * r478779;
double r478781 = a;
double r478782 = 4.0;
double r478783 = r478781 * r478782;
double r478784 = r478783 * r478779;
double r478785 = r478780 - r478784;
double r478786 = b;
double r478787 = c;
double r478788 = r478786 * r478787;
double r478789 = r478785 + r478788;
double r478790 = r478772 * r478782;
double r478791 = i;
double r478792 = r478790 * r478791;
double r478793 = r478789 - r478792;
double r478794 = j;
double r478795 = 27.0;
double r478796 = r478794 * r478795;
double r478797 = k;
double r478798 = r478796 * r478797;
double r478799 = r478793 - r478798;
return r478799;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r478800 = x;
double r478801 = -2.056417521339259e-78;
bool r478802 = r478800 <= r478801;
double r478803 = 8.052446072453818e+39;
bool r478804 = r478800 <= r478803;
double r478805 = !r478804;
bool r478806 = r478802 || r478805;
double r478807 = 18.0;
double r478808 = r478800 * r478807;
double r478809 = y;
double r478810 = t;
double r478811 = z;
double r478812 = r478810 * r478811;
double r478813 = r478809 * r478812;
double r478814 = r478808 * r478813;
double r478815 = a;
double r478816 = 4.0;
double r478817 = r478815 * r478816;
double r478818 = r478817 * r478810;
double r478819 = r478814 - r478818;
double r478820 = b;
double r478821 = c;
double r478822 = r478820 * r478821;
double r478823 = r478819 + r478822;
double r478824 = r478800 * r478816;
double r478825 = i;
double r478826 = r478824 * r478825;
double r478827 = r478823 - r478826;
double r478828 = 27.0;
double r478829 = k;
double r478830 = r478828 * r478829;
double r478831 = j;
double r478832 = r478830 * r478831;
double r478833 = r478827 - r478832;
double r478834 = r478808 * r478809;
double r478835 = r478834 * r478810;
double r478836 = r478835 * r478811;
double r478837 = r478836 - r478818;
double r478838 = r478837 + r478822;
double r478839 = r478838 - r478826;
double r478840 = r478831 * r478828;
double r478841 = r478840 * r478829;
double r478842 = r478839 - r478841;
double r478843 = r478806 ? r478833 : r478842;
return r478843;
}




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
Results
| Original | 5.5 |
|---|---|
| Target | 1.6 |
| Herbie | 1.6 |
if x < -2.056417521339259e-78 or 8.052446072453818e+39 < x Initial program 10.8
rmApplied associate-*l*8.3
Simplified8.3
rmApplied associate-*l*2.0
rmApplied pow12.0
Applied pow12.0
Applied pow12.0
Applied pow-prod-down2.0
Applied pow-prod-down2.0
Simplified1.9
rmApplied associate-*r*2.0
if -2.056417521339259e-78 < x < 8.052446072453818e+39Initial program 1.8
rmApplied associate-*l*4.4
Simplified4.4
rmApplied associate-*r*1.3
Final simplification1.6
herbie shell --seed 2019322
(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)))