Average Error: 37.0 → 3.9
Time: 21.5s
Precision: 64
Internal Precision: 128
\[R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
\[\sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)^2 + \left(\phi_1 - \phi_2\right)^2}^* \cdot R\]

Error

Bits error versus R

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 37.0

    \[R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
  2. Simplified3.9

    \[\leadsto \color{blue}{\sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)^2 + \left(\phi_1 - \phi_2\right)^2}^* \cdot R}\]
  3. Final simplification3.9

    \[\leadsto \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)^2 + \left(\phi_1 - \phi_2\right)^2}^* \cdot R\]

Reproduce

herbie shell --seed 2019016 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Equirectangular approximation to distance on a great circle"
  (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))

Details

Time bar (total: 19.6s)Debug log

sample207.0ms

Algorithm
intervals
Results
373×(pre true 80)
265×(body real 80)
40×(body real 640)
30×(body real 1280)
22×(body real 320)
16×(body real 160)

simplify142.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
142.0ms
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))))

prune23.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 3.5b

localize50.0ms

Local error

Found 4 expressions with local error:

2.9b
(cos (/ (+ phi2 phi1) 2))
0.2b
(* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2)))
0.1b
(* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R)
0.0b
(hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))

rewrite13.0ms

Algorithm
rewrite-expression-head
Rules
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
add-exp-log
associate-*l*
add-cbrt-cube
pow1
add-log-exp
log1p-expm1-u
expm1-log1p-u
associate-*r*
*-commutative
associate-*l/
flip--
cbrt-unprod
prod-exp
pow-prod-down
flip3--
hypot-udef
Counts
4 → 53
Calls
4 calls:
Slowest
6.0ms
(* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2)))
3.0ms
(cos (/ (+ phi2 phi1) 2))
3.0ms
(* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R)
0.0ms
(hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))

series775.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
356.0ms
(hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))
343.0ms
(* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R)
62.0ms
(* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2)))
15.0ms
(cos (/ (+ phi2 phi1) 2))

simplify1.9s

Counts
24 → 65
Calls
24 calls:
Slowest
362.0ms
(- (* (cos (* 1/2 (+ phi1 phi2))) lambda1) (* lambda2 (cos (* 1/2 (+ phi1 phi2)))))
278.0ms
(+ (/ (* lambda2 (* phi1 phi2)) (* (pow lambda1 2) (cos (* 1/2 (+ phi1 phi2))))) (+ (* lambda2 (cos (* 1/2 (+ phi1 phi2)))) (/ (* phi1 phi2) (* lambda1 (cos (* 1/2 (+ phi1 phi2)))))))
211.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
192.0ms
(* (* (* (- lambda1 lambda2) (- lambda1 lambda2)) (- lambda1 lambda2)) (* (* (cos (/ (+ phi2 phi1) 2)) (cos (/ (+ phi2 phi1) 2))) (cos (/ (+ phi2 phi1) 2))))
190.0ms
(* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi2 phi1) 2)))

prune961.0ms

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 3.5b

localize19.0ms

Local error

Found 4 expressions with local error:

2.9b
(cos (/ (+ phi2 phi1) 2))
2.9b
(cos (/ (+ phi2 phi1) 2))
2.9b
(cos (/ (+ phi2 phi1) 2))
0.5b
(cbrt (cos (/ (+ phi2 phi1) 2)))

rewrite8.0ms

Algorithm
rewrite-expression-head
Rules
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
add-log-exp
log1p-expm1-u
add-exp-log
add-cbrt-cube
pow1
expm1-log1p-u
cbrt-prod
pow1/3
Counts
4 → 40
Calls
4 calls:
Slowest
2.0ms
(cos (/ (+ phi2 phi1) 2))
2.0ms
(cos (/ (+ phi2 phi1) 2))
2.0ms
(cos (/ (+ phi2 phi1) 2))
1.0ms
(cbrt (cos (/ (+ phi2 phi1) 2)))

series134.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
83.0ms
(cbrt (cos (/ (+ phi2 phi1) 2)))
22.0ms
(cos (/ (+ phi2 phi1) 2))
15.0ms
(cos (/ (+ phi2 phi1) 2))
15.0ms
(cos (/ (+ phi2 phi1) 2))

simplify1.0s

Counts
15 → 52
Calls
15 calls:
Slowest
290.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
250.0ms
(- 1 (+ (* 1/12 (* phi1 phi2)) (* 1/24 (pow phi2 2))))
215.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
163.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
20.0ms
(cos (* 1/2 (+ phi1 phi2)))

prune1.0s

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 3.5b

localize21.0ms

Local error

Found 4 expressions with local error:

2.9b
(cos (/ (+ phi2 phi1) 2))
2.9b
(cos (/ (+ phi2 phi1) 2))
2.9b
(cos (/ (+ phi2 phi1) 2))
0.5b
(cbrt (cos (/ (+ phi2 phi1) 2)))

rewrite8.0ms

Algorithm
rewrite-expression-head
Rules
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
add-log-exp
log1p-expm1-u
add-exp-log
add-cbrt-cube
pow1
expm1-log1p-u
cbrt-prod
pow1/3
Counts
4 → 40
Calls
4 calls:
Slowest
2.0ms
(cos (/ (+ phi2 phi1) 2))
2.0ms
(cos (/ (+ phi2 phi1) 2))
2.0ms
(cos (/ (+ phi2 phi1) 2))
1.0ms
(cbrt (cos (/ (+ phi2 phi1) 2)))

series154.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
100.0ms
(cbrt (cos (/ (+ phi2 phi1) 2)))
24.0ms
(cos (/ (+ phi2 phi1) 2))
15.0ms
(cos (/ (+ phi2 phi1) 2))
15.0ms
(cos (/ (+ phi2 phi1) 2))

simplify993.0ms

Counts
15 → 52
Calls
15 calls:
Slowest
231.0ms
(- 1 (+ (* 1/12 (* phi1 phi2)) (* 1/24 (pow phi2 2))))
226.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
219.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
206.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
16.0ms
(cos (* 1/2 (+ phi1 phi2)))

prune1.1s

Pruning

9 alts after pruning (7 fresh and 2 done)

Merged error: 3.5b

localize34.0ms

Local error

Found 4 expressions with local error:

2.9b
(cos (/ (+ phi2 phi1) 2))
0.6b
(cbrt (- lambda1 lambda2))
0.6b
(cbrt (- lambda1 lambda2))
0.6b
(cbrt (- lambda1 lambda2))

rewrite8.0ms

Algorithm
rewrite-expression-head
Rules
cbrt-prod
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
cbrt-div
add-log-exp
log1p-expm1-u
add-exp-log
add-cbrt-cube
pow1
expm1-log1p-u
flip--
pow1/3
flip3--
Counts
4 → 54
Calls
4 calls:
Slowest
4.0ms
(cos (/ (+ phi2 phi1) 2))
1.0ms
(cbrt (- lambda1 lambda2))
1.0ms
(cbrt (- lambda1 lambda2))
1.0ms
(cbrt (- lambda1 lambda2))

series498.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
166.0ms
(cbrt (- lambda1 lambda2))
154.0ms
(cbrt (- lambda1 lambda2))
153.0ms
(cbrt (- lambda1 lambda2))
25.0ms
(cos (/ (+ phi2 phi1) 2))

simplify1.4s

Counts
27 → 66
Calls
27 calls:
Slowest
253.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
188.0ms
(- (exp (* 1/3 (+ (log -1) (log lambda2)))) (+ (* 1/9 (* (exp (* 1/3 (- (log -1) (* 5 (log lambda2))))) (pow lambda1 2))) (* 1/3 (* (exp (* 1/3 (- (log -1) (* 2 (log lambda2))))) lambda1))))
175.0ms
(- (exp (* 1/3 (+ (log -1) (log lambda2)))) (+ (* 1/9 (* (exp (* 1/3 (- (log -1) (* 5 (log lambda2))))) (pow lambda1 2))) (* 1/3 (* (exp (* 1/3 (- (log -1) (* 2 (log lambda2))))) lambda1))))
146.0ms
(exp (* 1/3 (- (log -1) (log (/ -1 lambda1)))))
121.0ms
(exp (* 1/3 (- (log -1) (log (/ -1 lambda1)))))

prune1.1s

Pruning

12 alts after pruning (9 fresh and 3 done)

Merged error: 3.5b

regimes858.0ms

Accuracy

0% (0.1b remaining)

Error of 3.9b against oracle of 3.7b and baseline of 3.9b

bsearch2.0ms

end0.0ms

sample7.2s

Algorithm
intervals
Results
11412×(pre true 80)
8226×(body real 80)
1287×(body real 640)
825×(body real 1280)
737×(body real 320)
337×(body real 160)