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

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 0 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 "Quadratic roots, full range"
  (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))

Details

Time bar (total: 1.1m)Debug log

start194.0ms

Algorithm
intervals

setup111.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 35.7b

localize401.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))

rewrite60.0ms

Algorithm
rewrite-expression-head
Counts
4 → 77
Calls

4 calls. Slowest were:

36.0ms
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))
12.0ms
(+ (- b) (sqrt (- (* b b) (* (* 4 a) c))))
6.0ms
(sqrt (- (* b b) (* (* 4 a) c)))

series250.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

96.0ms
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))
69.0ms
(+ (- b) (sqrt (- (* b b) (* (* 4 a) c))))
59.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
26.0ms
(- (* b b) (* (* 4 a) c))

simplify2.8s

Counts
40 → 89
Calls

40 calls. Slowest were:

500.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* 4 a) c) 3)))
380.0ms
(- (* (- b) (- b)) (* (sqrt (- (* b b) (* (* 4 a) c))) (sqrt (- (* b b) (* (* 4 a) c)))))
216.0ms
(sqrt (- (* (* b b) (* b b)) (* (* (* 4 a) c) (* (* 4 a) c))))

prune1.3s

Pruning

7 alts after pruning (7 fresh and 0 done)

Merged error: 5.9b

localize31.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))

rewrite45.0ms

Algorithm
rewrite-expression-head
Counts
4 → 99
Calls

4 calls. Slowest were:

18.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)))

series280.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

124.0ms
(/ (* 4 (* c a)) (* (* 2 a) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))))
59.0ms
(- (- b) (sqrt (- (* b b) (* (* 4 a) c))))
55.0ms
(sqrt (- (* b b) (* (* 4 a) c)))
42.0ms
(- (* b b) (* (* 4 a) c))

simplify8.0s

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)))))))
841.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)))))))
582.0ms
(+ (* (- b) (- b)) (+ (* (sqrt (- (* b b) (* (* 4 a) c))) (sqrt (- (* b b) (* (* 4 a) c)))) (* (- b) (sqrt (- (* b b) (* (* 4 a) c))))))

prune1.6s

Pruning

8 alts after pruning (7 fresh and 1 done)

Merged error: 5.9b

localize17.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))

series234.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

125.0ms
(/ (/ (* 4 (* c a)) (* 2 a)) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
57.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
45.0ms
(sqrt (fma (* a -4) c (* b b)))
8.0ms
(/ (* 4 (* c a)) (* 2 a))

simplify39.7s

Counts
153 → 149
Calls

153 calls. Slowest were:

1.4s
(/ (* (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.2s
(/ (/ (* (* (* 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.4s

Pruning

7 alts after pruning (6 fresh and 1 done)

Merged error: 5.9b

localize11.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))

rewrite28.0ms

Algorithm
rewrite-expression-head
Counts
4 → 99
Calls

4 calls. Slowest were:

14.0ms
(/ (* 2 c) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
9.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
2.0ms
(sqrt (fma (* a -4) c (* b b)))

series292.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

144.0ms
(/ (* 2 c) (- (- b) (sqrt (fma (* a -4) c (* b b)))))
56.0ms
(- (- b) (sqrt (fma (* a -4) c (* b b))))
53.0ms
(sqrt (fma (* a -4) c (* b b)))
38.0ms
(fma (* a -4) c (* b b))

simplify3.6s

Counts
94 → 111
Calls

94 calls. Slowest were:

456.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))))))
103.0ms
(fma (- (sqrt (fma (* a -4) c (* b b)))) 1 (* (sqrt (fma (* a -4) c (* b b))) 1))
90.0ms
(- (* 2 (/ (* a c) b)) (* 2 b))

prune1.5s

Pruning

6 alts after pruning (5 fresh and 1 done)

Merged error: 5.9b

regimes293.0ms

Accuracy

92% (1.9b remaining)

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

bsearch1.0s