Average Error: 34.2 → 10.3
Time: 24.9s
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: 24.1s)Debug log

sample161.0ms

Algorithm
intervals

simplify71.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

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

prune10.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 34.1b

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

rewrite74.0ms

Algorithm
rewrite-expression-head
Counts
4 → 59
Calls

4 calls. Slowest were:

39.0ms
(/ (- (sqrt (- (* b b) (* (* c a) 4))) b) (* 2 a))
25.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
4.0ms
(- (* b b) (* (* c a) 4))

series195.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

61.0ms
(/ (- (sqrt (- (* b b) (* (* c a) 4))) b) (* 2 a))
48.0ms
(sqrt (- (* b b) (* (* c a) 4)))
45.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
41.0ms
(- (* b b) (* (* c a) 4))

simplify2.1s

Counts
32 → 71
Calls

32 calls. Slowest were:

303.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))
279.0ms
(- (* (sqrt (- (* b b) (* (* c a) 4))) (sqrt (- (* b b) (* (* c a) 4)))) (* b b))
233.0ms
(- (pow (sqrt (- (* b b) (* (* c a) 4))) 3) (pow b 3))

prune745.0ms

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 6.1b

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

rewrite23.0ms

Algorithm
rewrite-expression-head
Counts
4 → 61
Calls

4 calls. Slowest were:

11.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
7.0ms
(/ 1 (/ (* 2 a) (- (sqrt (- (* b b) (* (* c a) 4))) b)))
2.0ms
(sqrt (- (* b b) (* (* c a) 4)))

series250.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

105.0ms
(/ 1 (/ (* 2 a) (- (sqrt (- (* b b) (* (* c a) 4))) b)))
64.0ms
(sqrt (- (* b b) (* (* c a) 4)))
44.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
38.0ms
(- (* b b) (* (* c a) 4))

simplify1.5s

Counts
30 → 73
Calls

30 calls. Slowest were:

284.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))
172.0ms
(+ (* (sqrt (- (* b b) (* (* c a) 4))) (sqrt (- (* b b) (* (* c a) 4)))) (+ (* b b) (* (sqrt (- (* b b) (* (* c a) 4))) b)))
130.0ms
(sqrt (- (* (* b b) (* b b)) (* (* (* c a) 4) (* (* c a) 4))))

prune824.0ms

Pruning

10 alts after pruning (8 fresh and 2 done)

Merged error: 6.1b

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

rewrite36.0ms

Algorithm
rewrite-expression-head
Counts
4 → 50
Calls

4 calls. Slowest were:

20.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
11.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
2.0ms
(sqrt (- (* b b) (* (* c a) 4)))

series213.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

67.0ms
(sqrt (- (* b b) (* (* c a) 4)))
53.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)
47.0ms
(sqrt (- (* b b) (* (* c a) 4)))
46.0ms
(- (sqrt (- (* b b) (* (* c a) 4))) b)

simplify1.5s

Counts
24 → 62
Calls

24 calls. Slowest were:

350.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))
275.0ms
(sqrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))
127.0ms
(sqrt (- (* (* b b) (* b b)) (* (* (* c a) 4) (* (* c a) 4))))

prune717.0ms

Pruning

10 alts after pruning (7 fresh and 3 done)

Merged error: 6.1b

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

rewrite14.0ms

Algorithm
rewrite-expression-head
Counts
4 → 74
Calls

4 calls. Slowest were:

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

series310.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

96.0ms
(cbrt (- (* b b) (* (* c a) 4)))
92.0ms
(cbrt (- (* b b) (* (* c a) 4)))
77.0ms
(cbrt (- (* b b) (* (* c a) 4)))
45.0ms
(sqrt (* (* (cbrt (- (* b b) (* (* c a) 4))) (cbrt (- (* b b) (* (* c a) 4)))) (cbrt (- (* b b) (* (* c a) 4)))))

simplify10.4s

Counts
54 → 86
Calls

54 calls. Slowest were:

577.0ms
(sqrt (* (* (cbrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3))) (cbrt (- (* b b) (* (* c a) 4)))) (cbrt (- (* b b) (* (* c a) 4)))))
501.0ms
(sqrt (* (* (cbrt (- (* b b) (* (* c a) 4))) (cbrt (- (* (* b b) (* b b)) (* (* (* c a) 4) (* (* c a) 4))))) (cbrt (- (pow (* b b) 3) (pow (* (* c a) 4) 3)))))
491.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)))))

prune1.0s

Pruning

10 alts after pruning (6 fresh and 4 done)

Merged error: 6.1b

regimes248.0ms

Accuracy

83.3% (4.8b remaining)

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

bsearch191.0ms

end0.0ms

sample3.4s

Algorithm
intervals