\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{1}{2} \cdot \frac{4 \cdot c}{\left(a \cdot \frac{c}{b} - b\right) \cdot 2}\\
\mathbf{elif}\;b \le 1.199441090208904 \cdot 10^{-250}:\\
\;\;\;\;\frac{1}{2} \cdot \frac{4 \cdot c}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}\\
\mathbf{elif}\;b \le 3.3389954009657566 \cdot 10^{+124}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;-\frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r18785638 = b;
double r18785639 = -r18785638;
double r18785640 = r18785638 * r18785638;
double r18785641 = 4.0;
double r18785642 = a;
double r18785643 = c;
double r18785644 = r18785642 * r18785643;
double r18785645 = r18785641 * r18785644;
double r18785646 = r18785640 - r18785645;
double r18785647 = sqrt(r18785646);
double r18785648 = r18785639 - r18785647;
double r18785649 = 2.0;
double r18785650 = r18785649 * r18785642;
double r18785651 = r18785648 / r18785650;
return r18785651;
}
double f(double a, double b, double c) {
double r18785652 = b;
double r18785653 = -1.1214768270116103e+154;
bool r18785654 = r18785652 <= r18785653;
double r18785655 = 0.5;
double r18785656 = 4.0;
double r18785657 = c;
double r18785658 = r18785656 * r18785657;
double r18785659 = a;
double r18785660 = r18785657 / r18785652;
double r18785661 = r18785659 * r18785660;
double r18785662 = r18785661 - r18785652;
double r18785663 = 2.0;
double r18785664 = r18785662 * r18785663;
double r18785665 = r18785658 / r18785664;
double r18785666 = r18785655 * r18785665;
double r18785667 = 1.199441090208904e-250;
bool r18785668 = r18785652 <= r18785667;
double r18785669 = r18785652 * r18785652;
double r18785670 = r18785659 * r18785657;
double r18785671 = r18785656 * r18785670;
double r18785672 = r18785669 - r18785671;
double r18785673 = sqrt(r18785672);
double r18785674 = r18785673 - r18785652;
double r18785675 = r18785658 / r18785674;
double r18785676 = r18785655 * r18785675;
double r18785677 = 3.3389954009657566e+124;
bool r18785678 = r18785652 <= r18785677;
double r18785679 = -r18785652;
double r18785680 = r18785679 - r18785673;
double r18785681 = r18785663 * r18785659;
double r18785682 = r18785680 / r18785681;
double r18785683 = r18785652 / r18785659;
double r18785684 = -r18785683;
double r18785685 = r18785678 ? r18785682 : r18785684;
double r18785686 = r18785668 ? r18785676 : r18785685;
double r18785687 = r18785654 ? r18785666 : r18785686;
return r18785687;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 32.8 |
|---|---|
| Target | 20.1 |
| Herbie | 6.4 |
if b < -1.1214768270116103e+154Initial program 62.9
rmApplied flip--62.9
Simplified37.6
rmApplied *-un-lft-identity37.6
Applied times-frac37.6
Simplified37.6
Simplified37.5
Taylor expanded around -inf 7.1
Simplified1.5
if -1.1214768270116103e+154 < b < 1.199441090208904e-250Initial program 32.2
rmApplied flip--32.3
Simplified16.1
rmApplied *-un-lft-identity16.1
Applied times-frac16.2
Simplified16.2
Simplified8.4
if 1.199441090208904e-250 < b < 3.3389954009657566e+124Initial program 7.8
if 3.3389954009657566e+124 < b Initial program 50.5
rmApplied flip--61.9
Simplified62.0
Taylor expanded around 0 3.5
Simplified3.5
Final simplification6.4
herbie shell --seed 2019128
(FPCore (a b c)
:name "The quadratic formula (r2)"
: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)))