Average Error: 33.8 → 9.9
Time: 4.1s
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.369694371126339229257094016308893237032 \cdot 10^{-83}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 6.823527231207463414371193958705943379769 \cdot 10^{100}:\\ \;\;\;\;1 \cdot \left(\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\right)\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \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.369694371126339229257094016308893237032 \cdot 10^{-83}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\

\end{array}
double f(double a, double b, double c) {
        double r90634 = b;
        double r90635 = -r90634;
        double r90636 = r90634 * r90634;
        double r90637 = 4.0;
        double r90638 = a;
        double r90639 = c;
        double r90640 = r90638 * r90639;
        double r90641 = r90637 * r90640;
        double r90642 = r90636 - r90641;
        double r90643 = sqrt(r90642);
        double r90644 = r90635 - r90643;
        double r90645 = 2.0;
        double r90646 = r90645 * r90638;
        double r90647 = r90644 / r90646;
        return r90647;
}

double f(double a, double b, double c) {
        double r90648 = b;
        double r90649 = -1.3696943711263392e-83;
        bool r90650 = r90648 <= r90649;
        double r90651 = -1.0;
        double r90652 = c;
        double r90653 = r90652 / r90648;
        double r90654 = r90651 * r90653;
        double r90655 = 6.8235272312074634e+100;
        bool r90656 = r90648 <= r90655;
        double r90657 = 1.0;
        double r90658 = -r90648;
        double r90659 = r90648 * r90648;
        double r90660 = 4.0;
        double r90661 = a;
        double r90662 = r90661 * r90652;
        double r90663 = r90660 * r90662;
        double r90664 = r90659 - r90663;
        double r90665 = sqrt(r90664);
        double r90666 = r90658 - r90665;
        double r90667 = 2.0;
        double r90668 = r90667 * r90661;
        double r90669 = r90657 / r90668;
        double r90670 = r90666 * r90669;
        double r90671 = r90657 * r90670;
        double r90672 = 1.0;
        double r90673 = r90648 / r90661;
        double r90674 = r90653 - r90673;
        double r90675 = r90672 * r90674;
        double r90676 = r90656 ? r90671 : r90675;
        double r90677 = r90650 ? r90654 : r90676;
        return r90677;
}

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

Original33.8
Target20.8
Herbie9.9
\[\begin{array}{l} \mathbf{if}\;b \lt 0.0:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}\\ \mathbf{else}:\\ \;\;\;\;\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.3696943711263392e-83

    1. Initial program 53.2

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

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]

    if -1.3696943711263392e-83 < b < 6.8235272312074634e+100

    1. Initial program 12.3

      \[\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-inv12.5

      \[\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}}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity12.5

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

    if 6.8235272312074634e+100 < b

    1. Initial program 46.4

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

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

      \[\leadsto \color{blue}{1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification9.9

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

Reproduce

herbie shell --seed 2019362 
(FPCore (a b c)
  :name "The quadratic formula (r2)"
  :precision binary64

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