Average Error: 17.0 → 3.7
Time: 45.8s
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 +o rules:numerics
(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: 42.3s)Debug log

sample852.0ms

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)

simplify80.0ms

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

prune38.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 16.5b

localize88.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)

rewrite21.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
cos-sum
sin-mult
cbrt-unprod
prod-exp
pow-prod-down
sub-neg
cos-diff
acos-asin
Counts
4 → 55
Calls
4 calls:
Slowest
8.0ms
(* (sin phi1) (sin phi2))
5.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R)
4.0ms
(cos (- lambda1 lambda2))
2.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))

series152.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
59.0ms
(* (sin phi1) (sin phi2))
53.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R)
28.0ms
(cos (- lambda1 lambda2))
11.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))

simplify356.0ms

Counts
26 → 67
Calls
26 calls:
Slowest
61.0ms
(- (+ 1 (* lambda2 lambda1)) (* 1/2 (pow lambda1 2)))
51.0ms
(* (* (* (sin phi1) (sin phi1)) (sin phi1)) (* (* (sin phi2) (sin phi2)) (sin phi2)))
33.0ms
(* (acos (+ (* (cos phi1) (* (cos (- lambda1 lambda2)) (cos phi2))) (* (sin phi1) (sin phi2)))) R)
33.0ms
(* (acos (+ (* (cos phi1) (* (cos (- lambda1 lambda2)) (cos phi2))) (* (sin phi1) (sin phi2)))) R)
32.0ms
(acos (+ (* (cos phi1) (* (cos (- lambda1 lambda2)) (cos phi2))) (* (sin phi1) (sin phi2))))

prune1.3s

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 2.9b

localize46.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))

rewrite20.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
log1p-expm1-u
expm1-log1p-u
*-commutative
sin-mult
cbrt-unprod
prod-exp
pow-prod-down
acos-asin
Counts
4 → 63
Calls
4 calls:
Slowest
7.0ms
(* (sin phi1) (sin phi2))
5.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2)))))) R)
4.0ms
(* (sin lambda1) (sin lambda2))
3.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))))))

series222.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
79.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2)))))) R)
68.0ms
(* (sin phi1) (sin phi2))
60.0ms
(* (sin lambda1) (sin lambda2))
16.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))))))

simplify2.0s

Counts
32 → 75
Calls
32 calls:
Slowest
277.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))))))))
269.0ms
(sqrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2)))))))
249.0ms
(* (acos (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (sin lambda2) (sin lambda1)))) (* (sin phi1) (sin phi2))))) R)
241.0ms
(acos (+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2)))))
236.0ms
(* R (acos (+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2))))))

prune1.8s

Pruning

13 alts after pruning (13 fresh and 0 done)

Merged error: 2.8b

localize46.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))

rewrite22.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
expm1-log1p-u
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 → 59
Calls
4 calls:
Slowest
8.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)
5.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))))))))

series255.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
95.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (log (exp (* (sin lambda1) (sin lambda2)))))))) R)
77.0ms
(log (exp (* (sin lambda1) (sin lambda2))))
54.0ms
(* (sin lambda1) (sin lambda2))
29.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (log (exp (* (sin lambda1) (sin lambda2))))))))

simplify2.0s

Counts
29 → 71
Calls
29 calls:
Slowest
307.0ms
(sqrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (log (exp (* (sin lambda1) (sin lambda2)))))))))
272.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))))))))))
270.0ms
(acos (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (sin lambda2) (sin lambda1)))) (* (sin phi1) (sin phi2)))))
239.0ms
(acos (+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2)))))
230.0ms
(acos (+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2)))))

prune1.9s

Pruning

12 alts after pruning (12 fresh and 0 done)

Merged error: 2.8b

localize52.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))

rewrite20.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
associate-*r*
exp-prod
log-prod
*-commutative
sin-mult
cbrt-unprod
prod-exp
pow-prod-down
rem-log-exp
acos-asin
Counts
4 → 60
Calls
4 calls:
Slowest
8.0ms
(* (sin phi1) (sin phi2))
5.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))))))))

series238.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
113.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))
31.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda2) (log (exp (sin lambda1))))))))
22.0ms
(log (exp (sin lambda1)))

simplify1.9s

Counts
29 → 72
Calls
29 calls:
Slowest
300.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))))))))))
262.0ms
(sqrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda2) (log (exp (sin lambda1)))))))))
219.0ms
(* (acos (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (sin lambda2) (sin lambda1)))) (* (sin phi1) (sin phi2))))) R)
209.0ms
(* R (acos (+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2))))))
200.0ms
(acos (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (sin lambda2) (sin lambda1)))) (* (sin phi1) (sin phi2)))))

prune1.8s

Pruning

12 alts after pruning (12 fresh and 0 done)

Merged error: 2.7b

regimes1.5s

Accuracy

0% (0.4b remaining)

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

bsearch5.0ms

end0.0ms

sample25.6s

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)