\frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{z \cdot c}\begin{array}{l}
\mathbf{if}\;z \le -3.02869394449276 \cdot 10^{-83}:\\
\;\;\;\;\left(\frac{1}{z} \cdot \frac{b}{c} + 9 \cdot \frac{x}{\frac{z \cdot c}{y}}\right) - 4 \cdot \left(a \cdot \frac{t}{c}\right)\\
\mathbf{elif}\;z \le -1.7227370871146143 \cdot 10^{-280}:\\
\;\;\;\;\frac{1}{z} \cdot \frac{\left(\left(x \cdot 9\right) \cdot y - \left(\left(z \cdot 4\right) \cdot t\right) \cdot a\right) + b}{c}\\
\mathbf{elif}\;z \le 3.2788810442771336 \cdot 10^{-60}:\\
\;\;\;\;\left(\frac{b}{z \cdot c} + 9 \cdot \frac{x}{\frac{z \cdot c}{y}}\right) - 4 \cdot \frac{a}{\frac{c}{t}}\\
\mathbf{elif}\;z \le 6.60886079314436056 \cdot 10^{258}:\\
\;\;\;\;\left(\frac{b}{z \cdot c} + \left(9 \cdot \frac{x}{z}\right) \cdot \frac{y}{c}\right) - 4 \cdot \frac{a \cdot t}{c}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{b}{z \cdot c} + \left(9 \cdot \left(x \cdot y\right)\right) \cdot \frac{1}{z \cdot c}\right) - 4 \cdot \frac{a \cdot t}{c}\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r869810 = x;
double r869811 = 9.0;
double r869812 = r869810 * r869811;
double r869813 = y;
double r869814 = r869812 * r869813;
double r869815 = z;
double r869816 = 4.0;
double r869817 = r869815 * r869816;
double r869818 = t;
double r869819 = r869817 * r869818;
double r869820 = a;
double r869821 = r869819 * r869820;
double r869822 = r869814 - r869821;
double r869823 = b;
double r869824 = r869822 + r869823;
double r869825 = c;
double r869826 = r869815 * r869825;
double r869827 = r869824 / r869826;
return r869827;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r869828 = z;
double r869829 = -3.02869394449276e-83;
bool r869830 = r869828 <= r869829;
double r869831 = 1.0;
double r869832 = r869831 / r869828;
double r869833 = b;
double r869834 = c;
double r869835 = r869833 / r869834;
double r869836 = r869832 * r869835;
double r869837 = 9.0;
double r869838 = x;
double r869839 = r869828 * r869834;
double r869840 = y;
double r869841 = r869839 / r869840;
double r869842 = r869838 / r869841;
double r869843 = r869837 * r869842;
double r869844 = r869836 + r869843;
double r869845 = 4.0;
double r869846 = a;
double r869847 = t;
double r869848 = r869847 / r869834;
double r869849 = r869846 * r869848;
double r869850 = r869845 * r869849;
double r869851 = r869844 - r869850;
double r869852 = -1.7227370871146143e-280;
bool r869853 = r869828 <= r869852;
double r869854 = r869838 * r869837;
double r869855 = r869854 * r869840;
double r869856 = r869828 * r869845;
double r869857 = r869856 * r869847;
double r869858 = r869857 * r869846;
double r869859 = r869855 - r869858;
double r869860 = r869859 + r869833;
double r869861 = r869860 / r869834;
double r869862 = r869832 * r869861;
double r869863 = 3.2788810442771336e-60;
bool r869864 = r869828 <= r869863;
double r869865 = r869833 / r869839;
double r869866 = r869865 + r869843;
double r869867 = r869834 / r869847;
double r869868 = r869846 / r869867;
double r869869 = r869845 * r869868;
double r869870 = r869866 - r869869;
double r869871 = 6.6088607931443606e+258;
bool r869872 = r869828 <= r869871;
double r869873 = r869838 / r869828;
double r869874 = r869837 * r869873;
double r869875 = r869840 / r869834;
double r869876 = r869874 * r869875;
double r869877 = r869865 + r869876;
double r869878 = r869846 * r869847;
double r869879 = r869878 / r869834;
double r869880 = r869845 * r869879;
double r869881 = r869877 - r869880;
double r869882 = r869838 * r869840;
double r869883 = r869837 * r869882;
double r869884 = r869831 / r869839;
double r869885 = r869883 * r869884;
double r869886 = r869865 + r869885;
double r869887 = r869886 - r869880;
double r869888 = r869872 ? r869881 : r869887;
double r869889 = r869864 ? r869870 : r869888;
double r869890 = r869853 ? r869862 : r869889;
double r869891 = r869830 ? r869851 : r869890;
return r869891;
}




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
Results
| Original | 20.3 |
|---|---|
| Target | 14.7 |
| Herbie | 9.8 |
if z < -3.02869394449276e-83Initial program 24.9
Taylor expanded around 0 12.2
rmApplied associate-/l*11.2
rmApplied *-un-lft-identity11.2
Applied times-frac10.9
Simplified10.9
rmApplied *-un-lft-identity10.9
Applied times-frac11.5
if -3.02869394449276e-83 < z < -1.7227370871146143e-280Initial program 5.8
rmApplied *-un-lft-identity5.8
Applied times-frac5.2
if -1.7227370871146143e-280 < z < 3.2788810442771336e-60Initial program 6.0
Taylor expanded around 0 9.8
rmApplied associate-/l*11.9
rmApplied associate-/l*7.4
if 3.2788810442771336e-60 < z < 6.6088607931443606e+258Initial program 24.3
Taylor expanded around 0 12.5
rmApplied times-frac10.5
Applied associate-*r*10.5
if 6.6088607931443606e+258 < z Initial program 41.9
Taylor expanded around 0 12.3
rmApplied div-inv12.3
Applied associate-*r*12.3
Final simplification9.8
herbie shell --seed 2020089
(FPCore (x y z t a b c)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, J"
:precision binary64
:herbie-target
(if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) -1.1001567408041051e-171) (/ (+ (- (* (* x 9) y) (* (* z 4) (* t a))) b) (* z c)) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) -0.0) (/ (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) z) c) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) 1.1708877911747488e-53) (/ (+ (- (* (* x 9) y) (* (* z 4) (* t a))) b) (* z c)) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) 2.876823679546137e+130) (- (+ (* (* 9 (/ y c)) (/ x z)) (/ b (* c z))) (* 4 (/ (* a t) c))) (if (< (/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)) 1.3838515042456319e+158) (/ (+ (- (* (* x 9) y) (* (* z 4) (* t a))) b) (* z c)) (- (+ (* 9 (* (/ y (* c z)) x)) (/ b (* c z))) (* 4 (/ (* a t) c))))))))
(/ (+ (- (* (* x 9) y) (* (* (* z 4) t) a)) b) (* z c)))