Average Error: 17.0 → 3.7
Time: 42.2s
Precision: 64
Internal Precision: 128
\[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R\]
\[R \cdot \left(\frac{\pi}{2} - \sin^{-1} \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) + \sin \phi_2 \cdot \sin \phi_1\right)\right)\]

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 17.0

    \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R\]
  2. Using strategy rm
  3. Applied cos-diff3.6

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R\]
  4. Using strategy rm
  5. Applied acos-asin3.7

    \[\leadsto \color{blue}{\left(\frac{\pi}{2} - \sin^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right)} \cdot R\]
  6. Final simplification3.7

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

Reproduce

herbie shell --seed 2019016 
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Spherical law of cosines"
  (* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))

Details

Time bar (total: 39.2s)Debug log

sample1.2s

Algorithm
intervals
Results
256×(pre true 80)
153×(body real 1280)
64×(body real 640)
23×(body real 320)
12×(body real 160)
(body real 80)

simplify41.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
40.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R)

prune22.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 16.5b

localize105.0ms

Local error

Found 4 expressions with local error:

4.0b
(cos (- lambda1 lambda2))
1.3b
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))
0.2b
(* (sin phi1) (sin phi2))
0.2b
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R)

rewrite23.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
associate-*r*
*-commutative
cos-sum
sin-mult
cbrt-unprod
prod-exp
pow-prod-down
sub-neg
cos-diff
acos-asin
Counts
4 → 47
Calls
4 calls:
Slowest
7.0ms
(* (sin phi1) (sin phi2))
6.0ms
(cos (- lambda1 lambda2))
5.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R)
2.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))

series182.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
67.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R)
65.0ms
(* (sin phi1) (sin phi2))
36.0ms
(cos (- lambda1 lambda2))
14.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))

simplify363.0ms

Counts
26 → 59
Calls
26 calls:
Slowest
70.0ms
(* (* (* (sin phi1) (sin phi1)) (sin phi1)) (* (* (sin phi2) (sin phi2)) (sin phi2)))
51.0ms
(- (+ 1 (* lambda2 lambda1)) (* 1/2 (pow lambda1 2)))
31.0ms
(* (cbrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))) (cbrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))))
31.0ms
(sqrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))))
29.0ms
(* (acos (+ (* (cos phi1) (* (cos (- lambda1 lambda2)) (cos phi2))) (* (sin phi1) (sin phi2)))) R)

prune1.1s

Pruning

9 alts after pruning (9 fresh and 0 done)

Merged error: 2.9b

localize44.0ms

Local error

Found 4 expressions with local error:

1.2b
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))))))
0.2b
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2)))))) R)
0.2b
(* (sin phi1) (sin phi2))
0.2b
(* (sin lambda1) (sin lambda2))

rewrite11.0ms

Algorithm
rewrite-expression-head
Rules
add-cube-cbrt
associate-*l*
*-un-lft-identity
add-sqr-sqrt
add-exp-log
add-cbrt-cube
pow1
associate-*r*
add-log-exp
*-commutative
sin-mult
cbrt-unprod
prod-exp
pow-prod-down
acos-asin
Counts
4 → 55
Calls
4 calls:
Slowest
3.0ms
(* (sin phi1) (sin phi2))
3.0ms
(* (sin lambda1) (sin lambda2))
2.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2)))))) R)
1.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))))))

series237.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
96.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2)))))) R)
61.0ms
(* (sin lambda1) (sin lambda2))
59.0ms
(* (sin phi1) (sin phi2))
21.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))))))

simplify1.4s

Counts
32 → 67
Calls
32 calls:
Slowest
195.0ms
(* (cbrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))))))) (cbrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))))))))
178.0ms
(sqrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2)))))))
145.0ms
(acos (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (sin lambda2) (sin lambda1)))) (* (sin phi1) (sin phi2)))))
145.0ms
(acos (+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2)))))
143.0ms
(* R (acos (+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2))))))

prune1.6s

Pruning

12 alts after pruning (12 fresh and 0 done)

Merged error: 2.8b

localize47.0ms

Local error

Found 4 expressions with local error:

2.7b
(log (exp (* (sin lambda1) (sin lambda2))))
1.2b
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (log (exp (* (sin lambda1) (sin lambda2))))))))
0.2b
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (log (exp (* (sin lambda1) (sin lambda2)))))))) R)
0.2b
(* (sin lambda1) (sin lambda2))

rewrite19.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
log-pow
associate-*r*
log-prod
*-commutative
sin-mult
cbrt-unprod
prod-exp
pow-prod-down
rem-log-exp
exp-to-pow
exp-prod
acos-asin
Counts
4 → 51
Calls
4 calls:
Slowest
7.0ms
(* (sin lambda1) (sin lambda2))
5.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (log (exp (* (sin lambda1) (sin lambda2)))))))) R)
4.0ms
(log (exp (* (sin lambda1) (sin lambda2))))
2.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (log (exp (* (sin lambda1) (sin lambda2))))))))

series252.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
80.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (log (exp (* (sin lambda1) (sin lambda2)))))))) R)
73.0ms
(log (exp (* (sin lambda1) (sin lambda2))))
65.0ms
(* (sin lambda1) (sin lambda2))
34.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (log (exp (* (sin lambda1) (sin lambda2))))))))

simplify1.4s

Counts
29 → 63
Calls
29 calls:
Slowest
268.0ms
(* (cbrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (log (exp (* (sin lambda1) (sin lambda2))))))))) (cbrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (log (exp (* (sin lambda1) (sin lambda2))))))))))
226.0ms
(sqrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (log (exp (* (sin lambda1) (sin lambda2)))))))))
164.0ms
(acos (+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2)))))
160.0ms
(acos (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (sin lambda2) (sin lambda1)))) (* (sin phi1) (sin phi2)))))
137.0ms
(* R (acos (+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2))))))

prune1.7s

Pruning

11 alts after pruning (11 fresh and 0 done)

Merged error: 2.8b

localize54.0ms

Local error

Found 4 expressions with local error:

3.2b
(log (exp (sin lambda1)))
1.2b
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda2) (log (exp (sin lambda1))))))))
0.2b
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda2) (log (exp (sin lambda1)))))))) R)
0.2b
(* (sin phi1) (sin phi2))

rewrite18.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
log-pow
associate-*r*
exp-prod
log-prod
*-commutative
sin-mult
cbrt-unprod
prod-exp
pow-prod-down
rem-log-exp
acos-asin
Counts
4 → 52
Calls
4 calls:
Slowest
7.0ms
(* (sin phi1) (sin phi2))
4.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda2) (log (exp (sin lambda1)))))))) R)
4.0ms
(log (exp (sin lambda1)))
2.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda2) (log (exp (sin lambda1))))))))

series225.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
107.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda2) (log (exp (sin lambda1)))))))) R)
73.0ms
(* (sin phi1) (sin phi2))
30.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda2) (log (exp (sin lambda1))))))))
16.0ms
(log (exp (sin lambda1)))

simplify1.4s

Counts
29 → 64
Calls
29 calls:
Slowest
182.0ms
(* (cbrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda2) (log (exp (sin lambda1))))))))) (cbrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda2) (log (exp (sin lambda1))))))))))
166.0ms
(acos (+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2)))))
165.0ms
(acos (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (sin lambda2) (sin lambda1)))) (* (sin phi1) (sin phi2)))))
160.0ms
(sqrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda2) (log (exp (sin lambda1)))))))))
146.0ms
(* (acos (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (sin lambda2) (sin lambda1)))) (* (sin phi1) (sin phi2))))) R)

prune1.5s

Pruning

11 alts after pruning (11 fresh and 0 done)

Merged error: 2.8b

regimes952.0ms

Accuracy

0% (0.4b remaining)

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

bsearch6.0ms

end0.0ms

sample25.4s

Algorithm
intervals
Results
8004×(pre true 80)
4769×(body real 1280)
2126×(body real 640)
703×(body real 320)
263×(body real 160)
127×(body real 80)
16×(body real 2560)