Average Error: 34.7 → 10.1
Time: 5.9s
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 -1.244774291407710824026233990502584030865 \cdot 10^{109}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 6.485606601696406255086078549712143397431 \cdot 10^{-71}:\\ \;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot 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 -1.244774291407710824026233990502584030865 \cdot 10^{109}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r75233 = b;
        double r75234 = -r75233;
        double r75235 = r75233 * r75233;
        double r75236 = 4.0;
        double r75237 = a;
        double r75238 = c;
        double r75239 = r75237 * r75238;
        double r75240 = r75236 * r75239;
        double r75241 = r75235 - r75240;
        double r75242 = sqrt(r75241);
        double r75243 = r75234 + r75242;
        double r75244 = 2.0;
        double r75245 = r75244 * r75237;
        double r75246 = r75243 / r75245;
        return r75246;
}

double f(double a, double b, double c) {
        double r75247 = b;
        double r75248 = -1.2447742914077108e+109;
        bool r75249 = r75247 <= r75248;
        double r75250 = 1.0;
        double r75251 = c;
        double r75252 = r75251 / r75247;
        double r75253 = a;
        double r75254 = r75247 / r75253;
        double r75255 = r75252 - r75254;
        double r75256 = r75250 * r75255;
        double r75257 = 6.485606601696406e-71;
        bool r75258 = r75247 <= r75257;
        double r75259 = -r75247;
        double r75260 = r75247 * r75247;
        double r75261 = 4.0;
        double r75262 = r75253 * r75251;
        double r75263 = r75261 * r75262;
        double r75264 = r75260 - r75263;
        double r75265 = sqrt(r75264);
        double r75266 = r75259 + r75265;
        double r75267 = 1.0;
        double r75268 = 2.0;
        double r75269 = r75268 * r75253;
        double r75270 = r75267 / r75269;
        double r75271 = r75266 * r75270;
        double r75272 = -1.0;
        double r75273 = r75272 * r75252;
        double r75274 = r75258 ? r75271 : r75273;
        double r75275 = r75249 ? r75256 : r75274;
        return r75275;
}

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.7
Target21.5
Herbie10.1
\[\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 < -1.2447742914077108e+109

    1. Initial program 49.3

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

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

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

    if -1.2447742914077108e+109 < b < 6.485606601696406e-71

    1. Initial program 13.5

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

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

    if 6.485606601696406e-71 < b

    1. Initial program 53.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.244774291407710824026233990502584030865 \cdot 10^{109}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \mathbf{elif}\;b \le 6.485606601696406255086078549712143397431 \cdot 10^{-71}:\\ \;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019353 
(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)))