\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 -3.359953003549156817553996908233908949771 \cdot 10^{103}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le \frac{4913572970964273}{2.34609900900146882186598677984664276916 \cdot 10^{254}}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{elif}\;b \le 5.099089738165329086098741767888130630655 \cdot 10^{67}:\\
\;\;\;\;\frac{-b}{2 \cdot a} - \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r68780 = b;
double r68781 = -r68780;
double r68782 = r68780 * r68780;
double r68783 = 4.0;
double r68784 = a;
double r68785 = c;
double r68786 = r68784 * r68785;
double r68787 = r68783 * r68786;
double r68788 = r68782 - r68787;
double r68789 = sqrt(r68788);
double r68790 = r68781 - r68789;
double r68791 = 2.0;
double r68792 = r68791 * r68784;
double r68793 = r68790 / r68792;
return r68793;
}
double f(double a, double b, double c) {
double r68794 = b;
double r68795 = -3.359953003549157e+103;
bool r68796 = r68794 <= r68795;
double r68797 = -1.0;
double r68798 = c;
double r68799 = r68798 / r68794;
double r68800 = r68797 * r68799;
double r68801 = 4913572970964273.0;
double r68802 = 2.346099009001469e+254;
double r68803 = r68801 / r68802;
bool r68804 = r68794 <= r68803;
double r68805 = 2.0;
double r68806 = r68805 * r68798;
double r68807 = -r68794;
double r68808 = r68794 * r68794;
double r68809 = 4.0;
double r68810 = a;
double r68811 = r68810 * r68798;
double r68812 = r68809 * r68811;
double r68813 = r68808 - r68812;
double r68814 = sqrt(r68813);
double r68815 = r68807 + r68814;
double r68816 = r68806 / r68815;
double r68817 = 5.099089738165329e+67;
bool r68818 = r68794 <= r68817;
double r68819 = r68805 * r68810;
double r68820 = r68807 / r68819;
double r68821 = r68814 / r68819;
double r68822 = r68820 - r68821;
double r68823 = 1.0;
double r68824 = r68794 / r68810;
double r68825 = r68799 - r68824;
double r68826 = r68823 * r68825;
double r68827 = r68818 ? r68822 : r68826;
double r68828 = r68804 ? r68816 : r68827;
double r68829 = r68796 ? r68800 : r68828;
return r68829;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.9 |
|---|---|
| Target | 20.8 |
| Herbie | 6.8 |
if b < -3.359953003549157e+103Initial program 59.7
Taylor expanded around -inf 2.5
if -3.359953003549157e+103 < b < 2.094358742794728e-239Initial program 30.7
rmApplied clear-num30.7
rmApplied flip--30.8
Applied associate-/r/30.8
Applied associate-/r*30.8
Simplified15.4
Taylor expanded around 0 9.6
if 2.094358742794728e-239 < b < 5.099089738165329e+67Initial program 8.0
rmApplied div-sub8.0
if 5.099089738165329e+67 < b Initial program 40.5
Taylor expanded around inf 5.4
Simplified5.4
Final simplification6.8
herbie shell --seed 2019304
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.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)))