\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le 7.488148662535596019530840801245208549295 \cdot 10^{-298}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{a}}{2}\\
\mathbf{elif}\;b \le 6.695434107567982389585546912636742560821 \cdot 10^{164}:\\
\;\;\;\;\frac{\left(\frac{a \cdot 4}{a} \cdot \frac{c}{\sqrt[3]{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, b \cdot b\right)} + b}}\right) \cdot \frac{-1}{\sqrt[3]{\left|\sqrt[3]{\mathsf{fma}\left(4, \left(-a\right) \cdot c, b \cdot b\right)}\right| \cdot \sqrt{\sqrt[3]{\mathsf{fma}\left(4, \left(-a\right) \cdot c, b \cdot b\right)}} + b} \cdot \sqrt[3]{\sqrt{\mathsf{fma}\left(\left(-a\right) \cdot c, 4, b \cdot b\right)} + b}}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot 4, -c, 0\right)}{b \cdot 2}}{a}}{2}\\
\end{array}double f(double a, double b, double c) {
double r53833 = b;
double r53834 = -r53833;
double r53835 = r53833 * r53833;
double r53836 = 4.0;
double r53837 = a;
double r53838 = c;
double r53839 = r53837 * r53838;
double r53840 = r53836 * r53839;
double r53841 = r53835 - r53840;
double r53842 = sqrt(r53841);
double r53843 = r53834 + r53842;
double r53844 = 2.0;
double r53845 = r53844 * r53837;
double r53846 = r53843 / r53845;
return r53846;
}
double f(double a, double b, double c) {
double r53847 = b;
double r53848 = 7.488148662535596e-298;
bool r53849 = r53847 <= r53848;
double r53850 = a;
double r53851 = 4.0;
double r53852 = c;
double r53853 = r53851 * r53852;
double r53854 = -r53853;
double r53855 = r53847 * r53847;
double r53856 = fma(r53850, r53854, r53855);
double r53857 = sqrt(r53856);
double r53858 = r53857 - r53847;
double r53859 = r53858 / r53850;
double r53860 = 2.0;
double r53861 = r53859 / r53860;
double r53862 = 6.695434107567982e+164;
bool r53863 = r53847 <= r53862;
double r53864 = r53850 * r53851;
double r53865 = r53864 / r53850;
double r53866 = -r53850;
double r53867 = r53866 * r53852;
double r53868 = fma(r53867, r53851, r53855);
double r53869 = sqrt(r53868);
double r53870 = r53869 + r53847;
double r53871 = cbrt(r53870);
double r53872 = r53852 / r53871;
double r53873 = r53865 * r53872;
double r53874 = -1.0;
double r53875 = fma(r53851, r53867, r53855);
double r53876 = cbrt(r53875);
double r53877 = fabs(r53876);
double r53878 = sqrt(r53876);
double r53879 = r53877 * r53878;
double r53880 = r53879 + r53847;
double r53881 = cbrt(r53880);
double r53882 = r53881 * r53871;
double r53883 = r53874 / r53882;
double r53884 = r53873 * r53883;
double r53885 = r53884 / r53860;
double r53886 = -r53852;
double r53887 = 0.0;
double r53888 = fma(r53864, r53886, r53887);
double r53889 = 2.0;
double r53890 = r53847 * r53889;
double r53891 = r53888 / r53890;
double r53892 = r53891 / r53850;
double r53893 = r53892 / r53860;
double r53894 = r53863 ? r53885 : r53893;
double r53895 = r53849 ? r53861 : r53894;
return r53895;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.8 |
|---|---|
| Target | 21.2 |
| Herbie | 16.5 |
if b < 7.488148662535596e-298Initial program 22.0
Simplified22.0
if 7.488148662535596e-298 < b < 6.695434107567982e+164Initial program 35.4
Simplified35.4
rmApplied flip--35.5
Simplified17.2
Simplified17.2
rmApplied *-un-lft-identity17.2
Applied add-cube-cbrt17.9
Applied *-un-lft-identity17.9
Applied times-frac17.9
Applied times-frac16.8
Simplified16.8
Simplified10.5
rmApplied add-cube-cbrt10.5
Applied sqrt-prod10.4
Simplified10.4
Simplified10.4
if 6.695434107567982e+164 < b Initial program 64.0
Simplified64.0
rmApplied flip--64.0
Simplified38.0
Simplified38.0
Taylor expanded around 0 14.4
Final simplification16.5
herbie shell --seed 2019195 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))