\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.3390906992477082 \cdot 10^{+154}:\\
\;\;\;\;\frac{\frac{-4 \cdot c}{2 \cdot \frac{a \cdot c}{b}}}{2}\\
\mathbf{elif}\;b \le -8.671664006593932 \cdot 10^{-208}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(-4 \cdot a, c, b \cdot b\right)} - b}{a}}{2}\\
\mathbf{elif}\;b \le 8.123773458674236 \cdot 10^{+149}:\\
\;\;\;\;\frac{\frac{-4 \cdot c}{\sqrt{\mathsf{fma}\left(a, \frac{c}{\frac{-1}{4}}, b \cdot b\right)} + b}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{-4 \cdot c}{\left(b - \frac{a \cdot c}{b}\right) \cdot 2}}{2}\\
\end{array}double f(double a, double b, double c) {
double r2838800 = b;
double r2838801 = -r2838800;
double r2838802 = r2838800 * r2838800;
double r2838803 = 4.0;
double r2838804 = a;
double r2838805 = c;
double r2838806 = r2838804 * r2838805;
double r2838807 = r2838803 * r2838806;
double r2838808 = r2838802 - r2838807;
double r2838809 = sqrt(r2838808);
double r2838810 = r2838801 + r2838809;
double r2838811 = 2.0;
double r2838812 = r2838811 * r2838804;
double r2838813 = r2838810 / r2838812;
return r2838813;
}
double f(double a, double b, double c) {
double r2838814 = b;
double r2838815 = -1.3390906992477082e+154;
bool r2838816 = r2838814 <= r2838815;
double r2838817 = -4.0;
double r2838818 = c;
double r2838819 = r2838817 * r2838818;
double r2838820 = 2.0;
double r2838821 = a;
double r2838822 = r2838821 * r2838818;
double r2838823 = r2838822 / r2838814;
double r2838824 = r2838820 * r2838823;
double r2838825 = r2838819 / r2838824;
double r2838826 = r2838825 / r2838820;
double r2838827 = -8.671664006593932e-208;
bool r2838828 = r2838814 <= r2838827;
double r2838829 = r2838817 * r2838821;
double r2838830 = r2838814 * r2838814;
double r2838831 = fma(r2838829, r2838818, r2838830);
double r2838832 = sqrt(r2838831);
double r2838833 = r2838832 - r2838814;
double r2838834 = r2838833 / r2838821;
double r2838835 = r2838834 / r2838820;
double r2838836 = 8.123773458674236e+149;
bool r2838837 = r2838814 <= r2838836;
double r2838838 = -0.25;
double r2838839 = r2838818 / r2838838;
double r2838840 = fma(r2838821, r2838839, r2838830);
double r2838841 = sqrt(r2838840);
double r2838842 = r2838841 + r2838814;
double r2838843 = r2838819 / r2838842;
double r2838844 = r2838843 / r2838820;
double r2838845 = r2838814 - r2838823;
double r2838846 = r2838845 * r2838820;
double r2838847 = r2838819 / r2838846;
double r2838848 = r2838847 / r2838820;
double r2838849 = r2838837 ? r2838844 : r2838848;
double r2838850 = r2838828 ? r2838835 : r2838849;
double r2838851 = r2838816 ? r2838826 : r2838850;
return r2838851;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.2 |
|---|---|
| Target | 20.6 |
| Herbie | 9.8 |
if b < -1.3390906992477082e+154Initial program 60.9
Simplified60.9
rmApplied flip--62.2
Simplified62.5
rmApplied *-un-lft-identity62.5
Applied *-un-lft-identity62.5
Applied *-un-lft-identity62.5
Applied times-frac62.5
Applied times-frac62.5
Simplified62.5
Simplified62.5
Taylor expanded around 0 62.4
Taylor expanded around -inf 23.4
if -1.3390906992477082e+154 < b < -8.671664006593932e-208Initial program 6.6
Simplified6.6
rmApplied *-un-lft-identity6.6
Applied associate-/r*6.6
Simplified6.6
if -8.671664006593932e-208 < b < 8.123773458674236e+149Initial program 32.1
Simplified32.1
rmApplied flip--32.3
Simplified16.5
rmApplied *-un-lft-identity16.5
Applied *-un-lft-identity16.5
Applied *-un-lft-identity16.5
Applied times-frac16.5
Applied times-frac16.5
Simplified16.5
Simplified14.8
Taylor expanded around 0 9.7
Taylor expanded around 0 9.7
Simplified9.7
if 8.123773458674236e+149 < b Initial program 62.3
Simplified62.3
rmApplied flip--62.3
Simplified38.2
rmApplied *-un-lft-identity38.2
Applied *-un-lft-identity38.2
Applied *-un-lft-identity38.2
Applied times-frac38.2
Applied times-frac38.2
Simplified38.2
Simplified38.1
Taylor expanded around 0 37.9
Taylor expanded around inf 6.7
Simplified6.7
Final simplification9.8
herbie shell --seed 2019162 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
:herbie-target
(if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))