\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 -1.1214768270116103 \cdot 10^{+154}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 1.199441090208904 \cdot 10^{-250}:\\
\;\;\;\;\frac{c}{\frac{\sqrt{\mathsf{fma}\left(\left(c \cdot a\right), -4, \left(b \cdot b\right)\right)} - b}{2}}\\
\mathbf{elif}\;b \le 3.3389954009657566 \cdot 10^{+124}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(-4, \left(c \cdot a\right), \left(b \cdot b\right)\right)}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;-\frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r17923813 = b;
double r17923814 = -r17923813;
double r17923815 = r17923813 * r17923813;
double r17923816 = 4.0;
double r17923817 = a;
double r17923818 = c;
double r17923819 = r17923817 * r17923818;
double r17923820 = r17923816 * r17923819;
double r17923821 = r17923815 - r17923820;
double r17923822 = sqrt(r17923821);
double r17923823 = r17923814 - r17923822;
double r17923824 = 2.0;
double r17923825 = r17923824 * r17923817;
double r17923826 = r17923823 / r17923825;
return r17923826;
}
double f(double a, double b, double c) {
double r17923827 = b;
double r17923828 = -1.1214768270116103e+154;
bool r17923829 = r17923827 <= r17923828;
double r17923830 = c;
double r17923831 = r17923830 / r17923827;
double r17923832 = -r17923831;
double r17923833 = 1.199441090208904e-250;
bool r17923834 = r17923827 <= r17923833;
double r17923835 = a;
double r17923836 = r17923830 * r17923835;
double r17923837 = -4.0;
double r17923838 = r17923827 * r17923827;
double r17923839 = fma(r17923836, r17923837, r17923838);
double r17923840 = sqrt(r17923839);
double r17923841 = r17923840 - r17923827;
double r17923842 = 2.0;
double r17923843 = r17923841 / r17923842;
double r17923844 = r17923830 / r17923843;
double r17923845 = 3.3389954009657566e+124;
bool r17923846 = r17923827 <= r17923845;
double r17923847 = -r17923827;
double r17923848 = fma(r17923837, r17923836, r17923838);
double r17923849 = sqrt(r17923848);
double r17923850 = r17923847 - r17923849;
double r17923851 = r17923835 * r17923842;
double r17923852 = r17923850 / r17923851;
double r17923853 = r17923827 / r17923835;
double r17923854 = -r17923853;
double r17923855 = r17923846 ? r17923852 : r17923854;
double r17923856 = r17923834 ? r17923844 : r17923855;
double r17923857 = r17923829 ? r17923832 : r17923856;
return r17923857;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 32.8 |
|---|---|
| Target | 20.1 |
| Herbie | 6.4 |
if b < -1.1214768270116103e+154Initial program 62.9
Simplified62.9
Taylor expanded around -inf 1.5
Simplified1.5
if -1.1214768270116103e+154 < b < 1.199441090208904e-250Initial program 32.2
Simplified32.2
rmApplied flip--32.3
Simplified16.1
Simplified16.2
rmApplied *-un-lft-identity16.2
Applied *-un-lft-identity16.2
Applied *-un-lft-identity16.2
Applied times-frac16.2
Applied times-frac16.2
Simplified16.2
Simplified8.4
if 1.199441090208904e-250 < b < 3.3389954009657566e+124Initial program 7.8
Simplified7.8
rmApplied *-un-lft-identity7.8
Applied add-sqr-sqrt8.8
Applied *-un-lft-identity8.8
Applied times-frac8.6
Applied times-frac8.5
Simplified8.5
Simplified7.8
if 3.3389954009657566e+124 < b Initial program 50.5
Simplified50.5
rmApplied flip--61.9
Simplified62.0
Simplified62.0
Taylor expanded around 0 3.5
Simplified3.5
Final simplification6.4
herbie shell --seed 2019128 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
:herbie-target
(if (< b 0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))