\left(\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4.0\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4.0\right) \cdot i\right) - \left(j \cdot 27.0\right) \cdot k
\begin{array}{l}
\mathbf{if}\;\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i = -\infty:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot \left(t \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i\right) - 27.0 \cdot \left(j \cdot k\right)\\
\mathbf{elif}\;\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i \le 1.736218430949862 \cdot 10^{+238}:\\
\;\;\;\;\left(\left(\left(t \cdot \left(\left(\left(x \cdot 18.0\right) \cdot y\right) \cdot z\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i\right) - j \cdot \left(27.0 \cdot k\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(18.0 \cdot \left(\left(t \cdot \left(z \cdot x\right)\right) \cdot y\right) - \left(a \cdot 4.0\right) \cdot t\right) + c \cdot b\right) - \left(x \cdot 4.0\right) \cdot i\right) - 27.0 \cdot \left(j \cdot k\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 r37538752 = x;
double r37538753 = 18.0;
double r37538754 = r37538752 * r37538753;
double r37538755 = y;
double r37538756 = r37538754 * r37538755;
double r37538757 = z;
double r37538758 = r37538756 * r37538757;
double r37538759 = t;
double r37538760 = r37538758 * r37538759;
double r37538761 = a;
double r37538762 = 4.0;
double r37538763 = r37538761 * r37538762;
double r37538764 = r37538763 * r37538759;
double r37538765 = r37538760 - r37538764;
double r37538766 = b;
double r37538767 = c;
double r37538768 = r37538766 * r37538767;
double r37538769 = r37538765 + r37538768;
double r37538770 = r37538752 * r37538762;
double r37538771 = i;
double r37538772 = r37538770 * r37538771;
double r37538773 = r37538769 - r37538772;
double r37538774 = j;
double r37538775 = 27.0;
double r37538776 = r37538774 * r37538775;
double r37538777 = k;
double r37538778 = r37538776 * r37538777;
double r37538779 = r37538773 - r37538778;
return r37538779;
}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
double r37538780 = t;
double r37538781 = x;
double r37538782 = 18.0;
double r37538783 = r37538781 * r37538782;
double r37538784 = y;
double r37538785 = r37538783 * r37538784;
double r37538786 = z;
double r37538787 = r37538785 * r37538786;
double r37538788 = r37538780 * r37538787;
double r37538789 = a;
double r37538790 = 4.0;
double r37538791 = r37538789 * r37538790;
double r37538792 = r37538791 * r37538780;
double r37538793 = r37538788 - r37538792;
double r37538794 = c;
double r37538795 = b;
double r37538796 = r37538794 * r37538795;
double r37538797 = r37538793 + r37538796;
double r37538798 = r37538781 * r37538790;
double r37538799 = i;
double r37538800 = r37538798 * r37538799;
double r37538801 = r37538797 - r37538800;
double r37538802 = -inf.0;
bool r37538803 = r37538801 <= r37538802;
double r37538804 = r37538780 * r37538786;
double r37538805 = r37538785 * r37538804;
double r37538806 = r37538805 - r37538792;
double r37538807 = r37538806 + r37538796;
double r37538808 = r37538807 - r37538800;
double r37538809 = 27.0;
double r37538810 = j;
double r37538811 = k;
double r37538812 = r37538810 * r37538811;
double r37538813 = r37538809 * r37538812;
double r37538814 = r37538808 - r37538813;
double r37538815 = 1.736218430949862e+238;
bool r37538816 = r37538801 <= r37538815;
double r37538817 = r37538809 * r37538811;
double r37538818 = r37538810 * r37538817;
double r37538819 = r37538801 - r37538818;
double r37538820 = r37538786 * r37538781;
double r37538821 = r37538780 * r37538820;
double r37538822 = r37538821 * r37538784;
double r37538823 = r37538782 * r37538822;
double r37538824 = r37538823 - r37538792;
double r37538825 = r37538824 + r37538796;
double r37538826 = r37538825 - r37538800;
double r37538827 = r37538826 - r37538813;
double r37538828 = r37538816 ? r37538819 : r37538827;
double r37538829 = r37538803 ? r37538814 : r37538828;
return r37538829;
}




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.4 |
|---|---|
| Target | 1.4 |
| Herbie | 2.9 |
if (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) < -inf.0Initial program 60.5
Taylor expanded around 0 60.5
rmApplied associate-*l*32.5
if -inf.0 < (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) < 1.736218430949862e+238Initial program 0.3
rmApplied associate-*l*0.3
if 1.736218430949862e+238 < (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) Initial program 18.4
Taylor expanded around 0 18.3
Taylor expanded around inf 13.4
rmApplied associate-*r*13.8
rmApplied associate-*r*8.6
Final simplification2.9
herbie shell --seed 2019163
(FPCore (x y z t a b c i j k)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, E"
:herbie-target
(if (< t -1.6210815397541398e-69) (- (- (* (* 18.0 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4.0)) (- (* (* k j) 27.0) (* c b))) (if (< t 165.68027943805222) (+ (- (* (* 18.0 y) (* x (* z t))) (* (+ (* a t) (* i x)) 4.0)) (- (* c b) (* 27.0 (* k j)))) (- (- (* (* 18.0 t) (* (* x y) z)) (* (+ (* a t) (* i x)) 4.0)) (- (* (* k j) 27.0) (* c b)))))
(- (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) (* (* j 27.0) k)))