Average Error: 58.2 → 34.4
Time: 59.7s
Precision: 64
Internal Precision: 128
\[\frac{c0}{2 \cdot w} \cdot \left(\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} + \sqrt{\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} \cdot \frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} - M \cdot M}\right)\]
\[\begin{array}{l} \mathbf{if}\;M \le 7.661994230609251 \cdot 10^{-164} \lor \neg \left(M \le 4.642757572049068 \cdot 10^{-129}\right):\\ \;\;\;\;0\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt{(\left(\frac{\frac{c0}{h}}{w} \cdot \left(\frac{d}{D} \cdot \frac{d}{D}\right)\right) \cdot \left(\frac{\frac{c0}{h}}{w} \cdot \left(\frac{d}{D} \cdot \frac{d}{D}\right)\right) + \left(M \cdot \left(-M\right)\right))_*} + \frac{\frac{c0}{h}}{w} \cdot \left(\frac{d}{D} \cdot \frac{d}{D}\right)\right) \cdot \frac{c0}{2 \cdot w}\\ \end{array}\]

Error

Bits error versus c0

Bits error versus w

Bits error versus h

Bits error versus D

Bits error versus d

Bits error versus M

Derivation

  1. Split input into 2 regimes
  2. if M < 7.661994230609251e-164 or 4.642757572049068e-129 < M

    1. Initial program 58.2

      \[\frac{c0}{2 \cdot w} \cdot \left(\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} + \sqrt{\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} \cdot \frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} - M \cdot M}\right)\]
    2. Taylor expanded around inf 35.4

      \[\leadsto \frac{c0}{2 \cdot w} \cdot \color{blue}{0}\]
    3. Taylor expanded around inf 33.8

      \[\leadsto \color{blue}{0}\]

    if 7.661994230609251e-164 < M < 4.642757572049068e-129

    1. Initial program 57.2

      \[\frac{c0}{2 \cdot w} \cdot \left(\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} + \sqrt{\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} \cdot \frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} - M \cdot M}\right)\]
    2. Using strategy rm
    3. Applied div-inv57.5

      \[\leadsto \frac{c0}{2 \cdot w} \cdot \left(\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} + \sqrt{\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} \cdot \color{blue}{\left(\left(c0 \cdot \left(d \cdot d\right)\right) \cdot \frac{1}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)}\right)} - M \cdot M}\right)\]
    4. Using strategy rm
    5. Applied *-un-lft-identity57.5

      \[\leadsto \frac{c0}{2 \cdot w} \cdot \left(\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} + \color{blue}{1 \cdot \sqrt{\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} \cdot \left(\left(c0 \cdot \left(d \cdot d\right)\right) \cdot \frac{1}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)}\right) - M \cdot M}}\right)\]
    6. Applied *-un-lft-identity57.5

      \[\leadsto \frac{c0}{2 \cdot w} \cdot \left(\color{blue}{1 \cdot \frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)}} + 1 \cdot \sqrt{\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} \cdot \left(\left(c0 \cdot \left(d \cdot d\right)\right) \cdot \frac{1}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)}\right) - M \cdot M}\right)\]
    7. Applied distribute-lft-out57.5

      \[\leadsto \frac{c0}{2 \cdot w} \cdot \color{blue}{\left(1 \cdot \left(\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} + \sqrt{\frac{c0 \cdot \left(d \cdot d\right)}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)} \cdot \left(\left(c0 \cdot \left(d \cdot d\right)\right) \cdot \frac{1}{\left(w \cdot h\right) \cdot \left(D \cdot D\right)}\right) - M \cdot M}\right)\right)}\]
    8. Simplified51.7

      \[\leadsto \frac{c0}{2 \cdot w} \cdot \left(1 \cdot \color{blue}{\left(\sqrt{(\left(\frac{\frac{c0}{h}}{w} \cdot \left(\frac{d}{D} \cdot \frac{d}{D}\right)\right) \cdot \left(\frac{\frac{c0}{h}}{w} \cdot \left(\frac{d}{D} \cdot \frac{d}{D}\right)\right) + \left(M \cdot \left(-M\right)\right))_*} + \frac{\frac{c0}{h}}{w} \cdot \left(\frac{d}{D} \cdot \frac{d}{D}\right)\right)}\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification34.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;M \le 7.661994230609251 \cdot 10^{-164} \lor \neg \left(M \le 4.642757572049068 \cdot 10^{-129}\right):\\ \;\;\;\;0\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt{(\left(\frac{\frac{c0}{h}}{w} \cdot \left(\frac{d}{D} \cdot \frac{d}{D}\right)\right) \cdot \left(\frac{\frac{c0}{h}}{w} \cdot \left(\frac{d}{D} \cdot \frac{d}{D}\right)\right) + \left(M \cdot \left(-M\right)\right))_*} + \frac{\frac{c0}{h}}{w} \cdot \left(\frac{d}{D} \cdot \frac{d}{D}\right)\right) \cdot \frac{c0}{2 \cdot w}\\ \end{array}\]

Reproduce

herbie shell --seed 2019004 +o rules:numerics
(FPCore (c0 w h D d M)
  :name "Henrywood and Agarwal, Equation (13)"
  (* (/ c0 (* 2 w)) (+ (/ (* c0 (* d d)) (* (* w h) (* D D))) (sqrt (- (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D)))) (* M M))))))

Details

Time bar (total: 57.9s)Debug log

sample749.0ms

Algorithm
intervals

simplify501.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

500.0ms
(* (/ c0 (* 2 w)) (+ (/ (* c0 (* d d)) (* (* w h) (* D D))) (sqrt (- (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D)))) (* M M)))))

prune19.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 59.2b

localize84.0ms

Local error

Found 4 expressions with local error:

28.6b
(+ (/ (* c0 (* d d)) (* (* w h) (* D D))) (sqrt (- (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D)))) (* M M))))
18.8b
(/ (* c0 (* d d)) (* (* w h) (* D D)))
18.8b
(/ (* c0 (* d d)) (* (* w h) (* D D)))
18.8b
(/ (* c0 (* d d)) (* (* w h) (* D D)))

rewrite78.0ms

Algorithm
rewrite-expression-head
Counts
4 → 78
Calls

4 calls. Slowest were:

58.0ms
(+ (/ (* c0 (* d d)) (* (* w h) (* D D))) (sqrt (- (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D)))) (* M M))))
8.0ms
(/ (* c0 (* d d)) (* (* w h) (* D D)))
6.0ms
(/ (* c0 (* d d)) (* (* w h) (* D D)))

series427.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

213.0ms
(+ (/ (* c0 (* d d)) (* (* w h) (* D D))) (sqrt (- (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D)))) (* M M))))
76.0ms
(/ (* c0 (* d d)) (* (* w h) (* D D)))
71.0ms
(/ (* c0 (* d d)) (* (* w h) (* D D)))
67.0ms
(/ (* c0 (* d d)) (* (* w h) (* D D)))

simplify13.0s

Counts
43 → 90
Calls

43 calls. Slowest were:

906.0ms
(* (* (* w h) (* D D)) (sqrt (+ (* (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D)))) (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D))))) (+ (* (* M M) (* M M)) (* (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D)))) (* M M))))))
879.0ms
(+ (* (* c0 (* d d)) (sqrt (+ (* (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D)))) (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D))))) (+ (* (* M M) (* M M)) (* (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D)))) (* M M)))))) (* (* (* w h) (* D D)) (sqrt (- (pow (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (/ (* c0 (* d d)) (* (* w h) (* D D)))) 3) (pow (* M M) 3)))))
873.0ms
(/ (* (* (* c0 (* d d)) (* c0 (* d d))) (* c0 (* d d))) (* (* (* (* w h) (* w h)) (* w h)) (* (* (* D D) (* D D)) (* D D))))

prune1.5s

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 33.3b

localize3.0ms

Local error

Found 1 expressions with local error:

7.4b
(* (/ c0 (* 2 w)) 0)

rewrite3.0ms

Algorithm
rewrite-expression-head
Counts
1 → 16
Calls

1 calls. Slowest were:

2.0ms
(* (/ c0 (* 2 w)) 0)

series2.0ms

Counts
1 → 3
Calls

1 calls. Slowest were:

2.0ms
(* (/ c0 (* 2 w)) 0)

simplify8.0ms

Counts
6 → 19
Calls

6 calls. Slowest were:

3.0ms
(* (cbrt (/ c0 (* 2 w))) (cbrt (/ c0 (* 2 w))))
2.0ms
(sqrt (/ c0 (* 2 w)))
1.0ms
(* c0 0)

prune208.0ms

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 31.3b

localize0.0ms

Local error

Found 0 expressions with local error:

rewrite0.0ms

Algorithm
rewrite-expression-head
Counts
0 → 0
Calls

0 calls. Slowest were:

series0.0ms

Counts
0 → 0
Calls

0 calls. Slowest were:

simplify0.0ms

Counts
0 → 0
Calls

0 calls. Slowest were:

prune91.0ms

Pruning

10 alts after pruning (9 fresh and 1 done)

Merged error: 31.3b

localize48.0ms

Local error

Found 4 expressions with local error:

29.3b
(+ (/ (* c0 (* d d)) (* (* w h) (* D D))) (sqrt (- (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))) (* M M))))
18.8b
(* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))
18.8b
(/ (* c0 (* d d)) (* (* w h) (* D D)))
18.8b
(/ (* c0 (* d d)) (* (* w h) (* D D)))

rewrite127.0ms

Algorithm
rewrite-expression-head
Counts
4 → 81
Calls

4 calls. Slowest were:

86.0ms
(+ (/ (* c0 (* d d)) (* (* w h) (* D D))) (sqrt (- (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))) (* M M))))
17.0ms
(* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))
11.0ms
(/ (* c0 (* d d)) (* (* w h) (* D D)))

series559.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

234.0ms
(+ (/ (* c0 (* d d)) (* (* w h) (* D D))) (sqrt (- (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))) (* M M))))
122.0ms
(/ (* c0 (* d d)) (* (* w h) (* D D)))
103.0ms
(/ (* c0 (* d d)) (* (* w h) (* D D)))
100.0ms
(* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))

simplify15.1s

Counts
47 → 93
Calls

47 calls. Slowest were:

1.2s
(* (* (* w h) (* D D)) (sqrt (+ (* (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))) (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D)))))) (+ (* (* M M) (* M M)) (* (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))) (* M M))))))
1.1s
(+ (* (* c0 (* d d)) (sqrt (+ (* (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))) (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D)))))) (+ (* (* M M) (* M M)) (* (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))) (* M M)))))) (* (* (* w h) (* D D)) (sqrt (- (pow (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))) 3) (pow (* M M) 3)))))
890.0ms
(+ (* (* c0 (* d d)) (sqrt (+ (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))) (* M M)))) (* (* (* w h) (* D D)) (sqrt (- (* (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D))))) (* (/ (* c0 (* d d)) (* (* w h) (* D D))) (* (* c0 (* d d)) (/ 1 (* (* w h) (* D D)))))) (* (* M M) (* M M))))))

prune1.7s

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 28.4b

regimes1.1s

Accuracy

-13.3% (6.8b remaining)

Error of 34.4b against oracle of 27.6b and baseline of 33.6b

bsearch698.0ms

end0.0ms

sample21.9s

Algorithm
intervals