Average Error: 34.3 → 8.7
Time: 5.9s
Precision: 64
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le -1.388209440671705791656215927803897929135 \cdot 10^{145}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 2.87498785203779979628582064108204053539 \cdot 10^{-182}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\ \mathbf{elif}\;b \le 9.191824015256066577021611473136461497822 \cdot 10^{77}:\\ \;\;\;\;\frac{\frac{0 + 4 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} \cdot \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \end{array}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le -1.388209440671705791656215927803897929135 \cdot 10^{145}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

\mathbf{elif}\;b \le 2.87498785203779979628582064108204053539 \cdot 10^{-182}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\

\mathbf{elif}\;b \le 9.191824015256066577021611473136461497822 \cdot 10^{77}:\\
\;\;\;\;\frac{\frac{0 + 4 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} \cdot \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}}{2 \cdot a}\\

\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

\end{array}
double f(double a, double b, double c) {
        double r60779 = b;
        double r60780 = -r60779;
        double r60781 = r60779 * r60779;
        double r60782 = 4.0;
        double r60783 = a;
        double r60784 = r60782 * r60783;
        double r60785 = c;
        double r60786 = r60784 * r60785;
        double r60787 = r60781 - r60786;
        double r60788 = sqrt(r60787);
        double r60789 = r60780 + r60788;
        double r60790 = 2.0;
        double r60791 = r60790 * r60783;
        double r60792 = r60789 / r60791;
        return r60792;
}

double f(double a, double b, double c) {
        double r60793 = b;
        double r60794 = -1.3882094406717058e+145;
        bool r60795 = r60793 <= r60794;
        double r60796 = 1.0;
        double r60797 = c;
        double r60798 = r60797 / r60793;
        double r60799 = a;
        double r60800 = r60793 / r60799;
        double r60801 = r60798 - r60800;
        double r60802 = r60796 * r60801;
        double r60803 = 2.8749878520377998e-182;
        bool r60804 = r60793 <= r60803;
        double r60805 = -r60793;
        double r60806 = r60793 * r60793;
        double r60807 = 4.0;
        double r60808 = r60807 * r60799;
        double r60809 = r60808 * r60797;
        double r60810 = r60806 - r60809;
        double r60811 = sqrt(r60810);
        double r60812 = r60805 + r60811;
        double r60813 = 2.0;
        double r60814 = r60813 * r60799;
        double r60815 = r60812 / r60814;
        double r60816 = 9.191824015256067e+77;
        bool r60817 = r60793 <= r60816;
        double r60818 = 0.0;
        double r60819 = r60799 * r60797;
        double r60820 = r60807 * r60819;
        double r60821 = r60818 + r60820;
        double r60822 = r60811 * r60811;
        double r60823 = sqrt(r60822);
        double r60824 = r60805 - r60823;
        double r60825 = r60821 / r60824;
        double r60826 = r60825 / r60814;
        double r60827 = -1.0;
        double r60828 = r60827 * r60798;
        double r60829 = r60817 ? r60826 : r60828;
        double r60830 = r60804 ? r60815 : r60829;
        double r60831 = r60795 ? r60802 : r60830;
        return r60831;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 4 regimes
  2. if b < -1.3882094406717058e+145

    1. Initial program 60.2

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Taylor expanded around -inf 2.5

      \[\leadsto \color{blue}{1 \cdot \frac{c}{b} - 1 \cdot \frac{b}{a}}\]
    3. Simplified2.5

      \[\leadsto \color{blue}{1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)}\]

    if -1.3882094406717058e+145 < b < 2.8749878520377998e-182

    1. Initial program 10.0

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]

    if 2.8749878520377998e-182 < b < 9.191824015256067e+77

    1. Initial program 37.1

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Using strategy rm
    3. Applied flip-+37.1

      \[\leadsto \frac{\color{blue}{\frac{\left(-b\right) \cdot \left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} \cdot \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}}{2 \cdot a}\]
    4. Simplified17.0

      \[\leadsto \frac{\frac{\color{blue}{0 + 4 \cdot \left(a \cdot c\right)}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\]
    5. Using strategy rm
    6. Applied add-sqr-sqrt17.0

      \[\leadsto \frac{\frac{0 + 4 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{\color{blue}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} \cdot \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}}}{2 \cdot a}\]

    if 9.191824015256067e+77 < b

    1. Initial program 58.3

      \[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    2. Taylor expanded around inf 2.8

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification8.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.388209440671705791656215927803897929135 \cdot 10^{145}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 2.87498785203779979628582064108204053539 \cdot 10^{-182}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\ \mathbf{elif}\;b \le 9.191824015256066577021611473136461497822 \cdot 10^{77}:\\ \;\;\;\;\frac{\frac{0 + 4 \cdot \left(a \cdot c\right)}{\left(-b\right) - \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} \cdot \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019346 
(FPCore (a b c)
  :name "Quadratic roots, full range"
  :precision binary64
  (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))