Average Error: 34.2 → 10.0
Time: 8.7s
Precision: 64
\[\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 -8.55528137777049654 \cdot 10^{140}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 5.08374808794434102 \cdot 10^{-70}:\\ \;\;\;\;\sqrt{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2}} \cdot \frac{\sqrt{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2}}}{a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \end{array}\]
\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 -8.55528137777049654 \cdot 10^{140}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r74000 = b;
        double r74001 = -r74000;
        double r74002 = r74000 * r74000;
        double r74003 = 4.0;
        double r74004 = a;
        double r74005 = c;
        double r74006 = r74004 * r74005;
        double r74007 = r74003 * r74006;
        double r74008 = r74002 - r74007;
        double r74009 = sqrt(r74008);
        double r74010 = r74001 + r74009;
        double r74011 = 2.0;
        double r74012 = r74011 * r74004;
        double r74013 = r74010 / r74012;
        return r74013;
}

double f(double a, double b, double c) {
        double r74014 = b;
        double r74015 = -8.555281377770497e+140;
        bool r74016 = r74014 <= r74015;
        double r74017 = 1.0;
        double r74018 = c;
        double r74019 = r74018 / r74014;
        double r74020 = a;
        double r74021 = r74014 / r74020;
        double r74022 = r74019 - r74021;
        double r74023 = r74017 * r74022;
        double r74024 = 5.083748087944341e-70;
        bool r74025 = r74014 <= r74024;
        double r74026 = r74014 * r74014;
        double r74027 = 4.0;
        double r74028 = r74020 * r74018;
        double r74029 = r74027 * r74028;
        double r74030 = r74026 - r74029;
        double r74031 = sqrt(r74030);
        double r74032 = r74031 - r74014;
        double r74033 = 2.0;
        double r74034 = r74032 / r74033;
        double r74035 = sqrt(r74034);
        double r74036 = r74035 / r74020;
        double r74037 = r74035 * r74036;
        double r74038 = -1.0;
        double r74039 = r74038 * r74019;
        double r74040 = r74025 ? r74037 : r74039;
        double r74041 = r74016 ? r74023 : r74040;
        return r74041;
}

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

Target

Original34.2
Target21.1
Herbie10.0
\[\begin{array}{l} \mathbf{if}\;b \lt 0.0:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if b < -8.555281377770497e+140

    1. Initial program 58.5

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2}}{a}}\]
    3. Taylor expanded around -inf 2.4

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

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

    if -8.555281377770497e+140 < b < 5.083748087944341e-70

    1. Initial program 12.5

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2}}{a}}\]
    3. Using strategy rm
    4. Applied *-un-lft-identity12.5

      \[\leadsto \frac{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2}}{\color{blue}{1 \cdot a}}\]
    5. Applied add-sqr-sqrt13.0

      \[\leadsto \frac{\color{blue}{\sqrt{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2}} \cdot \sqrt{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2}}}}{1 \cdot a}\]
    6. Applied times-frac13.0

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

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

    if 5.083748087944341e-70 < b

    1. Initial program 53.1

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2}}{a}}\]
    3. Taylor expanded around inf 8.7

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -8.55528137777049654 \cdot 10^{140}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 5.08374808794434102 \cdot 10^{-70}:\\ \;\;\;\;\sqrt{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2}} \cdot \frac{\sqrt{\frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}{2}}}{a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2020046 +o rules:numerics
(FPCore (a b c)
  :name "quadp (p42, positive)"
  :precision binary64

  :herbie-target
  (if (< b 0.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)))