Average Error: 33.5 → 7.6
Time: 1.2m
Precision: 64
Internal Precision: 128
\[\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.2928630895189542 \cdot 10^{+22}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le -5.15631482418829 \cdot 10^{-230}:\\ \;\;\;\;\frac{(\left(\sqrt[3]{-b} \cdot \sqrt[3]{-b}\right) \cdot \left(\sqrt[3]{-b}\right) + \left(\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right))_*}{a \cdot 2}\\ \mathbf{elif}\;b \le 1.1670951067282343 \cdot 10^{+105}:\\ \;\;\;\;\frac{2}{\frac{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}}{c}}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original33.5
Target20.8
Herbie7.6
\[\begin{array}{l} \mathbf{if}\;b \lt 0:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}}\\ \end{array}\]

Derivation

  1. Split input into 4 regimes
  2. if b < -1.2928630895189542e+22

    1. Initial program 33.8

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

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

    if -1.2928630895189542e+22 < b < -5.15631482418829e-230

    1. Initial program 9.3

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

      \[\leadsto \frac{\color{blue}{\left(\sqrt[3]{-b} \cdot \sqrt[3]{-b}\right) \cdot \sqrt[3]{-b}} + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
    4. Applied fma-def9.7

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

    if -5.15631482418829e-230 < b < 1.1670951067282343e+105

    1. Initial program 29.6

      \[\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-+29.8

      \[\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. Applied associate-/l/34.6

      \[\leadsto \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(2 \cdot a\right) \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}}\]
    5. Simplified21.6

      \[\leadsto \frac{\color{blue}{4 \cdot \left(c \cdot a\right)}}{\left(2 \cdot a\right) \cdot \left(\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}\]
    6. Using strategy rm
    7. Applied associate-/r*15.9

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

      \[\leadsto \frac{\frac{4 \cdot \left(c \cdot a\right)}{2 \cdot a}}{\color{blue}{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}}}\]
    9. Taylor expanded around -inf 9.8

      \[\leadsto \frac{\color{blue}{2 \cdot c}}{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}}\]
    10. Using strategy rm
    11. Applied associate-/l*10.1

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

    if 1.1670951067282343e+105 < b

    1. Initial program 59.1

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.2928630895189542 \cdot 10^{+22}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le -5.15631482418829 \cdot 10^{-230}:\\ \;\;\;\;\frac{(\left(\sqrt[3]{-b} \cdot \sqrt[3]{-b}\right) \cdot \left(\sqrt[3]{-b}\right) + \left(\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right))_*}{a \cdot 2}\\ \mathbf{elif}\;b \le 1.1670951067282343 \cdot 10^{+105}:\\ \;\;\;\;\frac{2}{\frac{\left(-b\right) - \sqrt{(\left(a \cdot -4\right) \cdot c + \left(b \cdot b\right))_*}}{c}}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2018365 +o rules:numerics
(FPCore (a b c)
  :name "The quadratic formula (r1)"

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

Details

Time bar (total: 1.1m)Debug log

start160.0ms

Algorithm
intervals

setup90.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 35.7b

localize421.0ms

Local error

Found 4 expressions with local error:

25.1b
(sqrt (- (* b b) (* (* 4 a) c)))
1.2b
(+ (- b) (sqrt (- (* b b) (* (* 4 a) c))))
0.8b
(- (* b b) (* (* 4 a) c))
0.1b
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))

rewrite36.0ms

Algorithm
rewrite-expression-head
Counts
4 → 77
Calls

4 calls. Slowest were:

18.0ms
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))
11.0ms
(+ (- b) (sqrt (- (* b b) (* (* 4 a) c))))
3.0ms
(sqrt (- (* b b) (* (* 4 a) c)))

series206.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

76.0ms
(+ (- b) (sqrt (- (* b b) (* (* 4 a) c))))
60.0ms
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))
42.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
27.0ms
(- (* b b) (* (* 4 a) c))

simplify2.5s

Counts
40 → 89
Calls

40 calls. Slowest were:

489.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* 4 a) c) 3)))
414.0ms
(- (* (- b) (- b)) (* (sqrt (- (* b b) (* (* 4 a) c))) (sqrt (- (* b b) (* (* 4 a) c)))))
200.0ms
(sqrt (- (* (* b b) (* b b)) (* (* (* 4 a) c) (* (* 4 a) c))))

prune1.4s

Pruning

7 alts after pruning (7 fresh and 0 done)

Merged error: 5.9b

localize27.0ms

Local error

Found 4 expressions with local error:

25.1b
(sqrt (- (* b b) (* (* 4 a) c)))
17.4b
(/ (* 4 (* c a)) (* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))))
1.2b
(- (- b) (sqrt (- (* b b) (* (* 4 a) c))))
0.8b
(- (* b b) (* (* 4 a) c))

rewrite52.0ms

Algorithm
rewrite-expression-head
Counts
4 → 99
Calls

4 calls. Slowest were:

24.0ms
(/ (* 4 (* c a)) (* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))))
14.0ms
(- (- b) (sqrt (- (* b b) (* (* 4 a) c))))
6.0ms
(sqrt (- (* b b) (* (* 4 a) c)))

series329.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

161.0ms
(/ (* 4 (* c a)) (* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))))
71.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
62.0ms
(- (- b) (sqrt (- (* b b) (* (* 4 a) c))))
35.0ms
(- (* b b) (* (* 4 a) c))

simplify8.2s

Counts
86 → 111
Calls

86 calls. Slowest were:

1.2s
(/ (* (* (* 4 (* c a)) (* 4 (* c a))) (* 4 (* c a))) (* (* (* (* 2 a) (* 2 a)) (* 2 a)) (* (* (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))) (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))))))
1000.0ms
(/ (* (* (* 4 (* c a)) (* 4 (* c a))) (* 4 (* c a))) (* (* (* (* 2 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)))))))
558.0ms
(+ (* (- b) (- b)) (+ (* (sqrt (- (* b b) (* (* 4 a) c))) (sqrt (- (* b b) (* (* 4 a) c)))) (* (- b) (sqrt (- (* b b) (* (* 4 a) c))))))

prune1.8s

Pruning

8 alts after pruning (7 fresh and 1 done)

Merged error: 5.9b

localize24.0ms

Local error

Found 4 expressions with local error:

25.1b
(sqrt (fma (* a -4) c (* b b)))
14.6b
(/ (* 4 (* c a)) (* 2 a))
1.2b
(- (- b) (sqrt (fma (* a -4) c (* b b))))
0.4b
(/ (/ (* 4 (* c a)) (* 2 a)) (- (- b) (sqrt (fma (* a -4) c (* b b)))))

rewrite21.0ms

Algorithm
rewrite-expression-head
Counts
4 → 137
Calls

4 calls. Slowest were:

10.0ms
(/ (/ (* 4 (* c a)) (* 2 a)) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
5.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
4.0ms
(/ (* 4 (* c a)) (* 2 a))

series305.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

165.0ms
(/ (/ (* 4 (* c a)) (* 2 a)) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
66.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
66.0ms
(sqrt (fma (* a -4) c (* b b)))
9.0ms
(/ (* 4 (* c a)) (* 2 a))

simplify40.2s

Counts
153 → 149
Calls

153 calls. Slowest were:

1.7s
(/ (* (cbrt (/ (* 4 (* c a)) (* 2 a))) (cbrt (/ (* 4 (* c a)) (* 2 a)))) (+ (sqrt (- b)) (sqrt (sqrt (fma (* a -4) c (* b b))))))
1.3s
(/ (* (cbrt (/ (* 4 (* c a)) (* 2 a))) (cbrt (/ (* 4 (* c a)) (* 2 a)))) (+ (sqrt (- b)) (sqrt (sqrt (fma (* a -4) c (* b b))))))
1.3s
(/ (/ (* (* (* 4 (* c a)) (* 4 (* c a))) (* 4 (* c a))) (* (* (* 2 a) (* 2 a)) (* 2 a))) (* (* (- (- b) (sqrt (fma (* a -4) c (* b b)))) (- (- b) (sqrt (fma (* a -4) c (* b b))))) (- (- b) (sqrt (fma (* a -4) c (* b b))))))

prune2.6s

Pruning

7 alts after pruning (6 fresh and 1 done)

Merged error: 5.9b

localize15.0ms

Local error

Found 4 expressions with local error:

25.1b
(sqrt (fma (* a -4) c (* b b)))
1.2b
(- (- b) (sqrt (fma (* a -4) c (* b b))))
0.4b
(/ (* 2 c) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
0.0b
(fma (* a -4) c (* b b))

rewrite15.0ms

Algorithm
rewrite-expression-head
Counts
4 → 99
Calls

4 calls. Slowest were:

7.0ms
(/ (* 2 c) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
5.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
2.0ms
(sqrt (fma (* a -4) c (* b b)))

series268.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

117.0ms
(/ (* 2 c) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
61.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
46.0ms
(sqrt (fma (* a -4) c (* b b)))
43.0ms
(fma (* a -4) c (* b b))

simplify3.4s

Counts
94 → 111
Calls

94 calls. Slowest were:

496.0ms
(+ (* (- b) (- b)) (+ (* (sqrt (fma (* a -4) c (* b b))) (sqrt (fma (* a -4) c (* b b)))) (* (- b) (sqrt (fma (* a -4) c (* b b))))))
91.0ms
(- (* 2 (/ (* a c) b)) (* 2 b))
81.0ms
(/ (* (* (* 2 c) (* 2 c)) (* 2 c)) (* (* (- (- b) (sqrt (fma (* a -4) c (* b b)))) (- (- b) (sqrt (fma (* a -4) c (* b b))))) (- (- b) (sqrt (fma (* a -4) c (* b b))))))

prune1.4s

Pruning

6 alts after pruning (5 fresh and 1 done)

Merged error: 5.9b

regimes312.0ms

Accuracy

92% (1.9b remaining)

Error of 7.6b against oracle of 5.7b and baseline of 29.2b

bsearch1.0s