\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}\;\left(x \cdot 9\right) \cdot y \le -2.2645492497816709 \cdot 10^{260}:\\
\;\;\;\;\mathsf{fma}\left(9, \frac{x}{z} \cdot \frac{y}{c}, \frac{b}{z \cdot c}\right) - \left(a \cdot \left(4 \cdot t\right)\right) \cdot \frac{1}{c}\\
\mathbf{elif}\;\left(x \cdot 9\right) \cdot y \le -39.298758853834741:\\
\;\;\;\;\mathsf{fma}\left(9, \frac{x \cdot y}{z \cdot c}, \frac{b}{z \cdot c}\right) - \left(a \cdot 4\right) \cdot \frac{t}{c}\\
\mathbf{elif}\;\left(x \cdot 9\right) \cdot y \le -8.52843664053116731 \cdot 10^{-250}:\\
\;\;\;\;\left(\frac{\mathsf{fma}\left(y, x \cdot 9, b\right)}{z} - \left(a \cdot 4\right) \cdot t\right) \cdot \frac{1}{c}\\
\mathbf{elif}\;\left(x \cdot 9\right) \cdot y \le -6.13380346891799 \cdot 10^{-310}:\\
\;\;\;\;\mathsf{fma}\left(9, \frac{x \cdot y}{z \cdot c}, \frac{b}{z \cdot c}\right) - \left(a \cdot 4\right) \cdot \frac{t}{c}\\
\mathbf{elif}\;\left(x \cdot 9\right) \cdot y \le 1.85002968924327207 \cdot 10^{179}:\\
\;\;\;\;\mathsf{fma}\left(9, \left(x \cdot y\right) \cdot \frac{1}{z \cdot c}, \frac{b}{z \cdot c}\right) - \frac{\left(a \cdot 4\right) \cdot t}{c}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(9, \frac{x}{z} \cdot \frac{y}{c}, \frac{b}{z \cdot c}\right) - \frac{a}{\frac{c}{4 \cdot t}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b, double c) {
double r532790 = x;
double r532791 = 9.0;
double r532792 = r532790 * r532791;
double r532793 = y;
double r532794 = r532792 * r532793;
double r532795 = z;
double r532796 = 4.0;
double r532797 = r532795 * r532796;
double r532798 = t;
double r532799 = r532797 * r532798;
double r532800 = a;
double r532801 = r532799 * r532800;
double r532802 = r532794 - r532801;
double r532803 = b;
double r532804 = r532802 + r532803;
double r532805 = c;
double r532806 = r532795 * r532805;
double r532807 = r532804 / r532806;
return r532807;
}
double f(double x, double y, double z, double t, double a, double b, double c) {
double r532808 = x;
double r532809 = 9.0;
double r532810 = r532808 * r532809;
double r532811 = y;
double r532812 = r532810 * r532811;
double r532813 = -2.264549249781671e+260;
bool r532814 = r532812 <= r532813;
double r532815 = z;
double r532816 = r532808 / r532815;
double r532817 = c;
double r532818 = r532811 / r532817;
double r532819 = r532816 * r532818;
double r532820 = b;
double r532821 = r532815 * r532817;
double r532822 = r532820 / r532821;
double r532823 = fma(r532809, r532819, r532822);
double r532824 = a;
double r532825 = 4.0;
double r532826 = t;
double r532827 = r532825 * r532826;
double r532828 = r532824 * r532827;
double r532829 = 1.0;
double r532830 = r532829 / r532817;
double r532831 = r532828 * r532830;
double r532832 = r532823 - r532831;
double r532833 = -39.29875885383474;
bool r532834 = r532812 <= r532833;
double r532835 = r532808 * r532811;
double r532836 = r532835 / r532821;
double r532837 = fma(r532809, r532836, r532822);
double r532838 = r532824 * r532825;
double r532839 = r532826 / r532817;
double r532840 = r532838 * r532839;
double r532841 = r532837 - r532840;
double r532842 = -8.528436640531167e-250;
bool r532843 = r532812 <= r532842;
double r532844 = fma(r532811, r532810, r532820);
double r532845 = r532844 / r532815;
double r532846 = r532838 * r532826;
double r532847 = r532845 - r532846;
double r532848 = r532847 * r532830;
double r532849 = -6.133803468918e-310;
bool r532850 = r532812 <= r532849;
double r532851 = 1.850029689243272e+179;
bool r532852 = r532812 <= r532851;
double r532853 = r532829 / r532821;
double r532854 = r532835 * r532853;
double r532855 = fma(r532809, r532854, r532822);
double r532856 = r532846 / r532817;
double r532857 = r532855 - r532856;
double r532858 = r532817 / r532827;
double r532859 = r532824 / r532858;
double r532860 = r532823 - r532859;
double r532861 = r532852 ? r532857 : r532860;
double r532862 = r532850 ? r532841 : r532861;
double r532863 = r532843 ? r532848 : r532862;
double r532864 = r532834 ? r532841 : r532863;
double r532865 = r532814 ? r532832 : r532864;
return r532865;
}




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
| Original | 20.7 |
|---|---|
| Target | 15.0 |
| Herbie | 8.8 |
if (* (* x 9.0) y) < -2.264549249781671e+260Initial program 48.5
Simplified47.5
Taylor expanded around 0 44.1
Simplified44.1
rmApplied times-frac13.7
rmApplied associate-*l*13.7
rmApplied div-inv13.7
if -2.264549249781671e+260 < (* (* x 9.0) y) < -39.29875885383474 or -8.528436640531167e-250 < (* (* x 9.0) y) < -6.133803468918e-310Initial program 19.4
Simplified10.8
Taylor expanded around 0 9.3
Simplified9.3
rmApplied *-un-lft-identity9.3
Applied times-frac8.4
Simplified8.4
if -39.29875885383474 < (* (* x 9.0) y) < -8.528436640531167e-250Initial program 16.7
Simplified8.5
rmApplied div-inv8.5
if -6.133803468918e-310 < (* (* x 9.0) y) < 1.850029689243272e+179Initial program 16.6
Simplified8.9
Taylor expanded around 0 7.7
Simplified7.7
rmApplied div-inv7.9
if 1.850029689243272e+179 < (* (* x 9.0) y) Initial program 37.6
Simplified33.3
Taylor expanded around 0 31.5
Simplified31.5
rmApplied times-frac14.5
rmApplied associate-*l*14.4
rmApplied associate-/l*12.1
Final simplification8.8
herbie shell --seed 2019199 +o rules:numerics
(FPCore (x y z t a b c)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, J"
:herbie-target
(if (< (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) -1.100156740804105e-171) (/ (+ (- (* (* x 9.0) y) (* (* z 4.0) (* t a))) b) (* z c)) (if (< (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) -0.0) (/ (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) z) c) (if (< (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) 1.1708877911747488e-53) (/ (+ (- (* (* x 9.0) y) (* (* z 4.0) (* t a))) b) (* z c)) (if (< (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) 2.876823679546137e+130) (- (+ (* (* 9.0 (/ y c)) (/ x z)) (/ b (* c z))) (* 4.0 (/ (* a t) c))) (if (< (/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)) 1.3838515042456319e+158) (/ (+ (- (* (* x 9.0) y) (* (* z 4.0) (* t a))) b) (* z c)) (- (+ (* 9.0 (* (/ y (* c z)) x)) (/ b (* c z))) (* 4.0 (/ (* a t) c))))))))
(/ (+ (- (* (* x 9.0) y) (* (* (* z 4.0) t) a)) b) (* z c)))