Average Error: 25.3 → 25.3
Time: 15.0s
Precision: 64
Internal Precision: 128
\[\frac{b \cdot c - a \cdot d}{c \cdot c + d \cdot d}\]
\[\frac{\frac{1}{\frac{\sqrt{c \cdot c + d \cdot d}}{c \cdot b - d \cdot a}}}{\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.3
Target0.4
Herbie25.3
\[\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.3

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

    \[\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.3

    \[\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.3

    \[\leadsto \frac{\frac{\color{blue}{1 \cdot \left(b \cdot c - a \cdot d\right)}}{\sqrt{c \cdot c + d \cdot d}}}{\sqrt{c \cdot c + d \cdot d}}\]
  7. Applied associate-/l*25.3

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

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

Reproduce

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

sample45.0ms

Algorithm
intervals

simplify72.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

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

prune12.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 27.7b

localize20.0ms

Local error

Found 3 expressions with local error:

27.7b
(/ (- (* b c) (* a d)) (+ (* c c) (* d d)))
0.8b
(- (* b c) (* a d))
0.0b
(+ (* c c) (* d d))

rewrite12.0ms

Algorithm
rewrite-expression-head
Counts
3 → 55
Calls

3 calls. Slowest were:

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

series118.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

76.0ms
(/ (- (* b c) (* a d)) (+ (* c c) (* d d)))
27.0ms
(- (* b c) (* a d))
15.0ms
(+ (* c c) (* d d))

simplify1.3s

Counts
41 → 64
Calls

41 calls. Slowest were:

281.0ms
(- (pow (* b c) 3) (pow (* a d) 3))
212.0ms
(- (* (* b c) (* b c)) (* (* a d) (* a d)))
155.0ms
(+ (* (* c c) (* c c)) (- (* (* d d) (* d d)) (* (* c c) (* d d))))

prune674.0ms

Pruning

10 alts after pruning (9 fresh and 1 done)

Merged error: 27.2b

localize14.0ms

Local error

Found 4 expressions with local error:

32.1b
(sqrt (+ (* c c) (* d d)))
32.1b
(sqrt (+ (* c c) (* d d)))
17.9b
(/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))
0.8b
(- (* b c) (* a d))

rewrite24.0ms

Algorithm
rewrite-expression-head
Counts
4 → 84
Calls

4 calls. Slowest were:

14.0ms
(/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))
4.0ms
(- (* b c) (* a d))
2.0ms
(sqrt (+ (* c c) (* d d)))

series192.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

116.0ms
(/ (- (* b c) (* a d)) (sqrt (+ (* c c) (* d d))))
35.0ms
(- (* b c) (* a d))
21.0ms
(sqrt (+ (* c c) (* d d)))
19.0ms
(sqrt (+ (* c c) (* d d)))

simplify2.4s

Counts
76 → 96
Calls

76 calls. Slowest were:

312.0ms
(- (pow (* b c) 3) (pow (* a d) 3))
284.0ms
(- (* (* b c) (* b c)) (* (* a d) (* a d)))
210.0ms
(/ (* (* (- (* b c) (* a d)) (- (* b c) (* a d))) (- (* b c) (* a d))) (* (* (sqrt (+ (* c c) (* d d))) (sqrt (+ (* c c) (* d d)))) (sqrt (+ (* c c) (* d d)))))

prune1.3s

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 24.1b

localize20.0ms

Local error

Found 4 expressions with local error:

32.1b
(sqrt (+ (* c c) (* d d)))
32.1b
(sqrt (+ (* c c) (* d d)))
18.0b
(/ (sqrt (+ (* c c) (* d d))) (- (* b c) (* a d)))
0.8b
(- (* b c) (* a d))

rewrite20.0ms

Algorithm
rewrite-expression-head
Counts
4 → 83
Calls

4 calls. Slowest were:

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

series172.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

88.0ms
(/ (sqrt (+ (* c c) (* d d))) (- (* b c) (* a d)))
31.0ms
(sqrt (+ (* c c) (* d d)))
29.0ms
(- (* b c) (* a d))
24.0ms
(sqrt (+ (* c c) (* d d)))

simplify1.4s

Counts
75 → 95
Calls

75 calls. Slowest were:

186.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))))
146.0ms
(+ (* (* b c) (* b c)) (+ (* (* a d) (* a d)) (* (* b c) (* a d))))
140.0ms
(sqrt (- (* (* c c) (* c c)) (* (* d d) (* d d))))

prune1.3s

Pruning

10 alts after pruning (9 fresh and 1 done)

Merged error: 24.1b

localize8.0ms

Local error

Found 4 expressions with local error:

27.6b
(/ (+ (* c c) (* d d)) (- (* b c) (* a d)))
0.8b
(- (* b c) (* a d))
0.3b
(/ 1 (/ (+ (* c c) (* d d)) (- (* b c) (* a d))))
0.0b
(+ (* c c) (* d d))

rewrite27.0ms

Algorithm
rewrite-expression-head
Counts
4 → 84
Calls

4 calls. Slowest were:

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

series203.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

87.0ms
(/ 1 (/ (+ (* c c) (* d d)) (- (* b c) (* a d))))
52.0ms
(/ (+ (* c c) (* d d)) (- (* b c) (* a d)))
38.0ms
(- (* b c) (* a d))
26.0ms
(+ (* c c) (* d d))

simplify1.1s

Counts
60 → 96
Calls

60 calls. Slowest were:

175.0ms
(+ (* (* b c) (* b c)) (+ (* (* a d) (* a d)) (* (* b c) (* a d))))
116.0ms
(/ (* (* (+ (* c c) (* d d)) (+ (* c c) (* d d))) (+ (* c c) (* d d))) (* (* (- (* b c) (* a d)) (- (* b c) (* a d))) (- (* b c) (* a d))))
109.0ms
(+ (* (* b c) (* b c)) (+ (* (* a d) (* a d)) (* (* b c) (* a d))))

prune1.1s

Pruning

12 alts after pruning (10 fresh and 2 done)

Merged error: 24.1b

regimes345.0ms

Accuracy

0% (2.7b remaining)

Error of 25.3b against oracle of 22.6b and baseline of 25.3b

bsearch2.0ms

end0.0ms

sample1.8s

Algorithm
intervals