Average Error: 34.2 → 10.3
Time: 31.4s
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 -4.21731702933355 \cdot 10^{+148}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 1.2612246360442721 \cdot 10^{-22}:\\ \;\;\;\;\frac{\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4} - b}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]

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.5
Herbie10.3
\[\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 3 regimes
  2. if b < -4.21731702933355e+148

    1. Initial program 58.9

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

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

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

    if -4.21731702933355e+148 < b < 1.2612246360442721e-22

    1. Initial program 14.8

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

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

    if 1.2612246360442721e-22 < b

    1. Initial program 54.5

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -4.21731702933355 \cdot 10^{+148}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 1.2612246360442721 \cdot 10^{-22}:\\ \;\;\;\;\frac{\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4} - b}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019007 
(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: 30.1s)Debug log

sample106.0ms

Algorithm
intervals

simplify55.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

55.0ms
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))

prune33.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 34.1b

localize40.0ms

Local error

Found 4 expressions with local error:

24.1b
(sqrt (- (* b b) (* (* c a) 4)))
1.5b
(- (sqrt (- (* b b) (* (* c a) 4))) b)
1.2b
(- (* b b) (* (* c a) 4))
0.1b
(/ (- (sqrt (- (* b b) (* (* c a) 4))) b) (* 2 a))

rewrite68.0ms

Algorithm
rewrite-expression-head
Counts
4 → 59
Calls

4 calls. Slowest were:

41.0ms
(/ (- (sqrt (- (* b b) (* (* c a) 4))) b) (* 2 a))
19.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
4.0ms
(sqrt (- (* b b) (* (* c a) 4)))

series172.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

62.0ms
(/ (- (sqrt (- (* b b) (* (* c a) 4))) b) (* 2 a))
44.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
40.0ms
(sqrt (- (* b b) (* (* c a) 4)))
26.0ms
(- (* b b) (* (* c a) 4))

simplify2.2s

Counts
32 → 71
Calls

32 calls. Slowest were:

417.0ms
(- (* (sqrt (- (* b b) (* (* c a) 4))) (sqrt (- (* b b) (* (* c a) 4)))) (* b b))
303.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))
239.0ms
(- (pow (sqrt (- (* b b) (* (* c a) 4))) 3) (pow b 3))

prune913.0ms

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 6.1b

localize6.0ms

Local error

Found 4 expressions with local error:

24.1b
(sqrt (- (* b b) (* (* c a) 4)))
1.5b
(- (sqrt (- (* b b) (* (* c a) 4))) b)
1.2b
(- (* b b) (* (* c a) 4))
0.1b
(/ 1 (/ (* 2 a) (- (sqrt (- (* b b) (* (* c a) 4))) b)))

rewrite35.0ms

Algorithm
rewrite-expression-head
Counts
4 → 61
Calls

4 calls. Slowest were:

16.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
12.0ms
(/ 1 (/ (* 2 a) (- (sqrt (- (* b b) (* (* c a) 4))) b)))
4.0ms
(- (* b b) (* (* c a) 4))

series271.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

106.0ms
(/ 1 (/ (* 2 a) (- (sqrt (- (* b b) (* (* c a) 4))) b)))
66.0ms
(sqrt (- (* b b) (* (* c a) 4)))
56.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
42.0ms
(- (* b b) (* (* c a) 4))

simplify1.6s

Counts
30 → 73
Calls

30 calls. Slowest were:

308.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))
195.0ms
(sqrt (- (* (* b b) (* b b)) (* (* (* c a) 4) (* (* c a) 4))))
146.0ms
(+ (* (sqrt (- (* b b) (* (* c a) 4))) (sqrt (- (* b b) (* (* c a) 4)))) (+ (* b b) (* (sqrt (- (* b b) (* (* c a) 4))) b)))

prune862.0ms

Pruning

10 alts after pruning (8 fresh and 2 done)

Merged error: 6.1b

localize20.0ms

Local error

Found 4 expressions with local error:

24.1b
(sqrt (- (* b b) (* (* c a) 4)))
24.1b
(sqrt (- (* b b) (* (* c a) 4)))
1.5b
(- (sqrt (- (* b b) (* (* c a) 4))) b)
1.5b
(- (sqrt (- (* b b) (* (* c a) 4))) b)

rewrite54.0ms

Algorithm
rewrite-expression-head
Counts
4 → 50
Calls

4 calls. Slowest were:

24.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
21.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
4.0ms
(sqrt (- (* b b) (* (* c a) 4)))

series217.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

62.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
60.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
48.0ms
(sqrt (- (* b b) (* (* c a) 4)))
47.0ms
(sqrt (- (* b b) (* (* c a) 4)))

simplify1.8s

Counts
24 → 62
Calls

24 calls. Slowest were:

376.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))
273.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))
144.0ms
(sqrt (- (* (* b b) (* b b)) (* (* (* c a) 4) (* (* c a) 4))))

prune1.1s

Pruning

10 alts after pruning (7 fresh and 3 done)

Merged error: 6.1b

localize23.0ms

Local error

Found 4 expressions with local error:

24.9b
(cbrt (- (* b b) (* (* c a) 4)))
24.9b
(cbrt (- (* b b) (* (* c a) 4)))
24.9b
(cbrt (- (* b b) (* (* c a) 4)))
24.1b
(sqrt (* (* (cbrt (- (* b b) (* (* c a) 4))) (cbrt (- (* b b) (* (* c a) 4)))) (cbrt (- (* b b) (* (* c a) 4)))))

rewrite19.0ms

Algorithm
rewrite-expression-head
Counts
4 → 74
Calls

4 calls. Slowest were:

13.0ms
(sqrt (* (* (cbrt (- (* b b) (* (* c a) 4))) (cbrt (- (* b b) (* (* c a) 4)))) (cbrt (- (* b b) (* (* c a) 4)))))
1.0ms
(cbrt (- (* b b) (* (* c a) 4)))
1.0ms
(cbrt (- (* b b) (* (* c a) 4)))

series371.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

104.0ms
(cbrt (- (* b b) (* (* c a) 4)))
103.0ms
(cbrt (- (* b b) (* (* c a) 4)))
96.0ms
(cbrt (- (* b b) (* (* c a) 4)))
68.0ms
(sqrt (* (* (cbrt (- (* b b) (* (* c a) 4))) (cbrt (- (* b b) (* (* c a) 4)))) (cbrt (- (* b b) (* (* c a) 4)))))

simplify13.0s

Counts
54 → 86
Calls

54 calls. Slowest were:

645.0ms
(sqrt (* (* (cbrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3))) (cbrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))) (cbrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))))
607.0ms
(sqrt (* (* (cbrt (- (* (* b b) (* b b)) (* (* (* c a) 4) (* (* c a) 4)))) (cbrt (- (* b b) (* (* c a) 4)))) (cbrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))))
600.0ms
(sqrt (* (* (cbrt (- (* (* b b) (* b b)) (* (* (* c a) 4) (* (* c a) 4)))) (cbrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))) (cbrt (- (* b b) (* (* c a) 4)))))

prune1.5s

Pruning

10 alts after pruning (6 fresh and 4 done)

Merged error: 6.1b

regimes472.0ms

Accuracy

83.3% (4.8b remaining)

Error of 10.3b against oracle of 5.5b and baseline of 34.1b

bsearch244.0ms

end0.0ms

sample4.9s

Algorithm
intervals