\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{c}{b} - \frac{b}{a}\\
\end{array}double f(double a, double b, double c) {
double r10947654 = b;
double r10947655 = -r10947654;
double r10947656 = r10947654 * r10947654;
double r10947657 = 4.0;
double r10947658 = a;
double r10947659 = c;
double r10947660 = r10947658 * r10947659;
double r10947661 = r10947657 * r10947660;
double r10947662 = r10947656 - r10947661;
double r10947663 = sqrt(r10947662);
double r10947664 = r10947655 - r10947663;
double r10947665 = 2.0;
double r10947666 = r10947665 * r10947658;
double r10947667 = r10947664 / r10947666;
return r10947667;
}
double f(double a, double b, double c) {
double r10947668 = b;
double r10947669 = -1.1214768270116103e+154;
bool r10947670 = r10947668 <= r10947669;
double r10947671 = 0.5;
double r10947672 = 4.0;
double r10947673 = c;
double r10947674 = r10947672 * r10947673;
double r10947675 = a;
double r10947676 = r10947673 / r10947668;
double r10947677 = r10947675 * r10947676;
double r10947678 = r10947677 - r10947668;
double r10947679 = 2.0;
double r10947680 = r10947678 * r10947679;
double r10947681 = r10947674 / r10947680;
double r10947682 = r10947671 * r10947681;
double r10947683 = 1.199441090208904e-250;
bool r10947684 = r10947668 <= r10947683;
double r10947685 = r10947668 * r10947668;
double r10947686 = r10947675 * r10947673;
double r10947687 = r10947672 * r10947686;
double r10947688 = r10947685 - r10947687;
double r10947689 = sqrt(r10947688);
double r10947690 = r10947689 - r10947668;
double r10947691 = r10947674 / r10947690;
double r10947692 = r10947671 * r10947691;
double r10947693 = 3.3389954009657566e+124;
bool r10947694 = r10947668 <= r10947693;
double r10947695 = -r10947668;
double r10947696 = r10947695 - r10947689;
double r10947697 = r10947679 * r10947675;
double r10947698 = r10947696 / r10947697;
double r10947699 = r10947668 / r10947675;
double r10947700 = r10947676 - r10947699;
double r10947701 = r10947694 ? r10947698 : r10947700;
double r10947702 = r10947684 ? r10947692 : r10947701;
double r10947703 = r10947670 ? r10947682 : r10947702;
return r10947703;
}




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
Taylor expanded around inf 3.3
Final simplification6.4
herbie shell --seed 2019128
(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)))