Average Error: 25.8 → 25.7
Time: 48.1s
Precision: 64
Internal Precision: 128
\[\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\]
\[\frac{\frac{c \cdot b - a \cdot d}{\sqrt{c \cdot c + d \cdot d}}}{\sqrt{c \cdot c + d \cdot d}}\]

Error

Bits error versus a

Bits error versus b

Bits error versus c

Bits error versus d

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original25.8
Target0.5
Herbie25.7
\[\begin{array}{l} \mathbf{if}\;\left|d\right| \lt \left|c\right|:\\ \;\;\;\;\frac{b - a \cdot \frac{d}{c}}{c + d \cdot \frac{d}{c}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(-a\right) + b \cdot \frac{c}{d}}{d + c \cdot \frac{c}{d}}\\ \end{array}\]

Derivation

  1. Initial program 25.8

    \[\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\]
  2. Using strategy rm
  3. Applied add-sqr-sqrt25.8

    \[\leadsto \frac{b \cdot c - a \cdot d}{\color{blue}{\sqrt{c \cdot c + d \cdot d} \cdot \sqrt{c \cdot c + d \cdot d}}}\]
  4. Applied associate-/r*25.7

    \[\leadsto \color{blue}{\frac{\frac{b \cdot c - a \cdot d}{\sqrt{c \cdot c + d \cdot d}}}{\sqrt{c \cdot c + d \cdot d}}}\]
  5. Using strategy rm
  6. Applied *-un-lft-identity25.7

    \[\leadsto \color{blue}{1 \cdot \frac{\frac{b \cdot c - a \cdot d}{\sqrt{c \cdot c + d \cdot d}}}{\sqrt{c \cdot c + d \cdot d}}}\]
  7. Final simplification25.7

    \[\leadsto \frac{\frac{c \cdot b - a \cdot d}{\sqrt{c \cdot c + d \cdot d}}}{\sqrt{c \cdot c + d \cdot d}}\]

Reproduce

herbie shell --seed 2019005 
(FPCore (a b c d)
  :name "Complex division, imag part"

  :herbie-target
  (if (< (fabs d) (fabs c)) (/ (- b (* a (/ d c))) (+ c (* d (/ d c)))) (/ (+ (- a) (* b (/ c d))) (+ d (* c (/ c d)))))

  (/ (- (* b c) (* a d)) (+ (* c c) (* d d))))

Details

Time bar (total: 47.3s)Debug log

sample69.0ms

Algorithm
intervals

simplify68.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

68.0ms
(/ (- (* b c) (* a d)) (+ (* c c) (* d d)))

prune12.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 23.9b

localize37.0ms

Local error

Found 3 expressions with local error:

23.9b
(/ (- (* b c) (* a d)) (+ (* c c) (* d d)))
0.0b
(- (* b c) (* a d))
0.0b
(+ (* c c) (* d d))

rewrite12.0ms

Algorithm
rewrite-expression-head
Counts
3 → 55
Calls

3 calls. Slowest were:

7.0ms
(/ (- (* b c) (* a d)) (+ (* c c) (* d d)))
2.0ms
(+ (* c c) (* d d))
2.0ms
(- (* b c) (* a d))

series160.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

85.0ms
(/ (- (* b c) (* a d)) (+ (* c c) (* d d)))
50.0ms
(- (* b c) (* a d))
25.0ms
(+ (* c c) (* d d))

simplify1.3s

Counts
41 → 64
Calls

41 calls. Slowest were:

331.0ms
(- (pow (* b c) 3) (pow (* a d) 3))
236.0ms
(- (* (* b c) (* b c)) (* (* a d) (* a d)))
149.0ms
(+ (* (* c c) (* c c)) (- (* (* d d) (* d d)) (* (* c c) (* d d))))

prune823.0ms

Pruning

8 alts after pruning (8 fresh and 0 done)

Merged error: 23.4b

localize17.0ms

Local error

Found 4 expressions with local error:

28.1b
(sqrt (+ (* c c) (* d d)))
28.1b
(sqrt (+ (* c c) (* d d)))
16.1b
(/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))
0.1b
(/ (/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d)))) (sqrt (+ (* c c) (* d d))))

rewrite59.0ms

Algorithm
rewrite-expression-head
Counts
4 → 264
Calls

4 calls. Slowest were:

24.0ms
(/ (/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d)))) (sqrt (+ (* c c) (* d d))))
15.0ms
(/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))
4.0ms
(sqrt (+ (* c c) (* d d)))

series217.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

88.0ms
(/ (/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d)))) (sqrt (+ (* c c) (* d d))))
87.0ms
(/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))
23.0ms
(sqrt (+ (* c c) (* d d)))
19.0ms
(sqrt (+ (* c c) (* d d)))

simplify20.5s

Counts
400 → 276
Calls

400 calls. Slowest were:

560.0ms
(/ (* (* (/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d)))) (/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))) (/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))) (* (* (sqrt (+ (* c c) (* d d))) (sqrt (+ (* c c) (* d d)))) (sqrt (+ (* c c) (* d d)))))
387.0ms
(- (pow (* b c) 3) (pow (* a d) 3))
308.0ms
(- (* (* b c) (* b c)) (* (* a d) (* a d)))

prune3.3s

Pruning

9 alts after pruning (9 fresh and 0 done)

Merged error: 21.7b

localize4.0ms

Local error

Found 4 expressions with local error:

28.1b
(sqrt (+ (* c c) (* d d)))
28.1b
(sqrt (+ (* c c) (* d d)))
16.1b
(/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))
0.1b
(/ (/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d)))) (sqrt (+ (* c c) (* d d))))

rewrite27.0ms

Algorithm
rewrite-expression-head
Counts
4 → 264
Calls

4 calls. Slowest were:

12.0ms
(/ (/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d)))) (sqrt (+ (* c c) (* d d))))
7.0ms
(/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))
2.0ms
(sqrt (+ (* c c) (* d d)))

series168.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

69.0ms
(/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))
54.0ms
(/ (/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d)))) (sqrt (+ (* c c) (* d d))))
26.0ms
(sqrt (+ (* c c) (* d d)))
19.0ms
(sqrt (+ (* c c) (* d d)))

simplify13.9s

Counts
400 → 276
Calls

400 calls. Slowest were:

315.0ms
(/ (* (* (/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d)))) (/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))) (/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))) (* (* (sqrt (+ (* c c) (* d d))) (sqrt (+ (* c c) (* d d)))) (sqrt (+ (* c c) (* d d)))))
187.0ms
(- (pow (* b c) 3) (pow (* a d) 3))
171.0ms
(- (* (* b c) (* b c)) (* (* a d) (* a d)))

prune2.7s

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 21.7b

localize9.0ms

Local error

Found 4 expressions with local error:

28.1b
(sqrt (+ (* c c) (* d d)))
28.1b
(sqrt (+ (* c c) (* d d)))
16.1b
(/ (sqrt (+ (* c c) (* d d))) (- (* b c) (* a d)))
0.2b
(/ 1 (/ (sqrt (+ (* c c) (* d d))) (- (* b c) (* a d))))

rewrite15.0ms

Algorithm
rewrite-expression-head
Counts
4 → 110
Calls

4 calls. Slowest were:

7.0ms
(/ (sqrt (+ (* c c) (* d d))) (- (* b c) (* a d)))
3.0ms
(/ 1 (/ (sqrt (+ (* c c) (* d d))) (- (* b c) (* a d))))
2.0ms
(sqrt (+ (* c c) (* d d)))

series150.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

60.0ms
(/ 1 (/ (sqrt (+ (* c c) (* d d))) (- (* b c) (* a d))))
52.0ms
(/ (sqrt (+ (* c c) (* d d))) (- (* b c) (* a d)))
19.0ms
(sqrt (+ (* c c) (* d d)))
18.0ms
(sqrt (+ (* c c) (* d d)))

simplify1.2s

Counts
100 → 122
Calls

100 calls. Slowest were:

110.0ms
(/ (* (* (sqrt (+ (* c c) (* d d))) (sqrt (+ (* c c) (* d d)))) (sqrt (+ (* c c) (* d d)))) (* (* (- (* b c) (* a d)) (- (* b c) (* a d))) (- (* b c) (* a d))))
85.0ms
(+ (* (* b c) (* b c)) (+ (* (* a d) (* a d)) (* (* b c) (* a d))))
84.0ms
(sqrt (- (* (* c c) (* c c)) (* (* d d) (* d d))))

prune1.0s

Pruning

9 alts after pruning (7 fresh and 2 done)

Merged error: 21.7b

regimes222.0ms

Accuracy

0% (2.9b remaining)

Error of 25.7b against oracle of 22.9b and baseline of 25.7b

bsearch2.0ms

end0.0ms

sample1.3s

Algorithm
intervals