Average Error: 36.8 → 3.6
Time: 23.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 36.8

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

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

    \[\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 2019022 +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: 21.6s)Debug log

sample179.0ms

Algorithm
intervals
Results
84.0ms281×body80valid
28.0ms28×body1280valid
21.0ms33×body320valid
20.0ms25×body640valid
3.0ms10×body160valid

simplify130.0ms

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

prune30.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 2.4b

localize27.0ms

Local error

Found 4 expressions with local error:

4.5b
(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))

rewrite11.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
5.0ms
(* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2)))
3.0ms
(cos (/ (+ phi2 phi1) 2))
2.0ms
(* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R)
0.0ms
(hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))

series1.0s

Counts
4 → 12
Calls
4 calls:
Slowest
532.0ms
(* (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)) R)
378.0ms
(hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))
83.0ms
(* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2)))
16.0ms
(cos (/ (+ phi2 phi1) 2))

simplify1.5s

Counts
24 → 65
Calls
24 calls:
Slowest
265.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)))))))
229.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
210.0ms
(* (* (* (- lambda1 lambda2) (- lambda1 lambda2)) (- lambda1 lambda2)) (* (* (cos (/ (+ phi2 phi1) 2)) (cos (/ (+ phi2 phi1) 2))) (cos (/ (+ phi2 phi1) 2))))
140.0ms
(* (- (* lambda1 lambda1) (* lambda2 lambda2)) (cos (/ (+ phi2 phi1) 2)))
134.0ms
(- (+ (* lambda2 (* (cos (* 1/2 (+ phi1 phi2))) R)) (+ (/ (* phi1 (* R phi2)) (* (cos (* 1/2 (+ phi1 phi2))) lambda1)) (/ (* phi1 (* lambda2 (* R phi2))) (* (cos (* 1/2 (+ phi1 phi2))) (pow lambda1 2))))))

prune919.0ms

Pruning

10 alts after pruning (9 fresh and 1 done)

Merged error: 2.3b

localize9.0ms

Local error

Found 4 expressions with local error:

4.5b
(cos (/ (+ phi2 phi1) 2))
4.5b
(cos (/ (+ phi2 phi1) 2))
0.3b
(* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) (* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) R))
0.2b
(* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) R)

rewrite16.0ms

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

series1.2s

Counts
4 → 12
Calls
4 calls:
Slowest
754.0ms
(* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) R)
439.0ms
(* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) (* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) R))
24.0ms
(cos (/ (+ phi2 phi1) 2))
22.0ms
(cos (/ (+ phi2 phi1) 2))

simplify1.6s

Counts
25 → 66
Calls
25 calls:
Slowest
388.0ms
(* (* (* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)))) (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)))) (* (* (* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) R) (* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) R)) (* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) R)))
227.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
223.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
147.0ms
(- (+ (* lambda2 (* (cos (* 1/2 (+ phi1 phi2))) R)) (+ (/ (* phi1 (* R phi2)) (* (cos (* 1/2 (+ phi1 phi2))) lambda1)) (/ (* phi1 (* lambda2 (* R phi2))) (* (cos (* 1/2 (+ phi1 phi2))) (pow lambda1 2))))))
124.0ms
(+ (* lambda2 (* (cos (* 1/2 (+ phi1 phi2))) R)) (+ (/ (* R (* phi1 phi2)) (* lambda1 (cos (* 1/2 (+ phi1 phi2))))) (/ (* R (* lambda2 (* phi1 phi2))) (* (pow lambda1 2) (cos (* 1/2 (+ phi1 phi2)))))))

prune1.1s

Pruning

11 alts after pruning (10 fresh and 1 done)

Merged error: 2.3b

localize41.0ms

Local error

Found 4 expressions with local error:

4.5b
(cos (/ (+ phi2 phi1) 2))
4.5b
(cos (/ (+ phi2 phi1) 2))
0.5b
(log (exp (cos (/ (+ phi2 phi1) 2))))
0.3b
(* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) (* (sqrt (hypot (* (- lambda1 lambda2) (log (exp (cos (/ (+ phi2 phi1) 2))))) (- phi1 phi2))) R))

rewrite32.0ms

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

series542.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
466.0ms
(* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) (* (sqrt (hypot (* (- lambda1 lambda2) (log (exp (cos (/ (+ phi2 phi1) 2))))) (- phi1 phi2))) R))
28.0ms
(cos (/ (+ phi2 phi1) 2))
25.0ms
(log (exp (cos (/ (+ phi2 phi1) 2))))
23.0ms
(cos (/ (+ phi2 phi1) 2))

simplify1.6s

Counts
27 → 67
Calls
27 calls:
Slowest
286.0ms
(* (* (* (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2))) (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)))) (sqrt (hypot (* (- lambda1 lambda2) (cos (/ (+ phi2 phi1) 2))) (- phi1 phi2)))) (* (* (* (sqrt (hypot (* (- lambda1 lambda2) (log (exp (cos (/ (+ phi2 phi1) 2))))) (- phi1 phi2))) R) (* (sqrt (hypot (* (- lambda1 lambda2) (log (exp (cos (/ (+ phi2 phi1) 2))))) (- phi1 phi2))) R)) (* (sqrt (hypot (* (- lambda1 lambda2) (log (exp (cos (/ (+ phi2 phi1) 2))))) (- phi1 phi2))) R)))
246.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
231.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
224.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
155.0ms
(- (+ (* lambda2 (* (cos (* 1/2 (+ phi1 phi2))) R)) (+ (/ (* phi1 (* R phi2)) (* (cos (* 1/2 (+ phi1 phi2))) lambda1)) (/ (* phi1 (* lambda2 (* R phi2))) (* (cos (* 1/2 (+ phi1 phi2))) (pow lambda1 2))))))

prune1.4s

Pruning

12 alts after pruning (10 fresh and 2 done)

Merged error: 2.3b

localize22.0ms

Local error

Found 4 expressions with local error:

4.5b
(cos (/ (+ phi2 phi1) 2))
4.5b
(cos (/ (+ phi2 phi1) 2))
4.5b
(cos (/ (+ phi2 phi1) 2))
4.5b
(cos (/ (+ phi2 phi1) 2))

rewrite11.0ms

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

series69.0ms

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

simplify1.1s

Counts
12 → 48
Calls
12 calls:
Slowest
299.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
277.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
247.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
193.0ms
(- 1 (+ (* 1/4 (* phi1 phi2)) (* 1/8 (pow phi2 2))))
15.0ms
(cos (* 1/2 (+ phi1 phi2)))

prune1.0s

Pruning

12 alts after pruning (9 fresh and 3 done)

Merged error: 2.3b

regimes772.0ms

Accuracy

0% (0.2b remaining)

Error of 3.6b against oracle of 3.4b and baseline of 3.6b

bsearch1.0ms

end0.0ms

sample7.2s

Algorithm
intervals
Results
3.4s8391×body80valid
1.5s1258×body640valid
1.2s814×body1280valid
689.0ms718×body320valid
169.0ms321×body160valid