Average Error: 17.0 → 4.3
Time: 48.7s
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\]
\[e^{\log \left(\log \left(e^{\cos^{-1} \left((\left((\left(\cos \lambda_2\right) \cdot \left(\cos \lambda_1\right) + \left(\sin \lambda_2 \cdot \sin \lambda_1\right))_*\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \left(\sin \phi_2 \cdot \sin \phi_1\right))_*\right)}\right)\right)} \cdot R\]

Error

Bits error versus R

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

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-diff4.2

    \[\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. Taylor expanded around inf 4.2

    \[\leadsto \color{blue}{\cos^{-1} \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right) + \sin \phi_1 \cdot \sin \phi_2\right)\right) \cdot R}\]
  5. Simplified4.2

    \[\leadsto \color{blue}{\cos^{-1} \left((\left((\left(\cos \lambda_2\right) \cdot \left(\cos \lambda_1\right) + \left(\sin \lambda_2 \cdot \sin \lambda_1\right))_*\right) \cdot \left(\cos \phi_2 \cdot \cos \phi_1\right) + \left(\sin \phi_1 \cdot \sin \phi_2\right))_*\right) \cdot R}\]
  6. Using strategy rm
  7. Applied add-log-exp4.3

    \[\leadsto \color{blue}{\log \left(e^{\cos^{-1} \left((\left((\left(\cos \lambda_2\right) \cdot \left(\cos \lambda_1\right) + \left(\sin \lambda_2 \cdot \sin \lambda_1\right))_*\right) \cdot \left(\cos \phi_2 \cdot \cos \phi_1\right) + \left(\sin \phi_1 \cdot \sin \phi_2\right))_*\right)}\right)} \cdot R\]
  8. Using strategy rm
  9. Applied add-exp-log4.3

    \[\leadsto \color{blue}{e^{\log \left(\log \left(e^{\cos^{-1} \left((\left((\left(\cos \lambda_2\right) \cdot \left(\cos \lambda_1\right) + \left(\sin \lambda_2 \cdot \sin \lambda_1\right))_*\right) \cdot \left(\cos \phi_2 \cdot \cos \phi_1\right) + \left(\sin \phi_1 \cdot \sin \phi_2\right))_*\right)}\right)\right)}} \cdot R\]
  10. Final simplification4.3

    \[\leadsto e^{\log \left(\log \left(e^{\cos^{-1} \left((\left((\left(\cos \lambda_2\right) \cdot \left(\cos \lambda_1\right) + \left(\sin \lambda_2 \cdot \sin \lambda_1\right))_*\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \left(\sin \phi_2 \cdot \sin \phi_1\right))_*\right)}\right)\right)} \cdot R\]

Reproduce

herbie shell --seed 2019002 +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: 43.7s)Debug log

sample1.3s

Algorithm
intervals

simplify92.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

91.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R)

prune30.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 15.9b

localize54.0ms

Local error

Found 4 expressions with local error:

2.3b
(cos (- lambda1 lambda2))
0.6b
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))
0.2b
(* (sin phi1) (sin phi2))
0.2b
(* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))

rewrite22.0ms

Algorithm
rewrite-expression-head
Counts
4 → 65
Calls

4 calls. Slowest were:

11.0ms
(* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))
4.0ms
(* (sin phi1) (sin phi2))
4.0ms
(cos (- lambda1 lambda2))

series175.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

87.0ms
(* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))
53.0ms
(* (sin phi1) (sin phi2))
23.0ms
(cos (- lambda1 lambda2))
12.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)))))

simplify1.3s

Counts
37 → 77
Calls

37 calls. Slowest were:

294.0ms
(* (* (* (* (cos phi1) (cos phi2)) (* (cos phi1) (cos phi2))) (* (cos phi1) (cos phi2))) (* (* (cos (- lambda1 lambda2)) (cos (- lambda1 lambda2))) (cos (- lambda1 lambda2))))
280.0ms
(* (* (* (* (cos phi1) (cos phi1)) (cos phi1)) (* (* (cos phi2) (cos phi2)) (cos phi2))) (* (* (cos (- lambda1 lambda2)) (cos (- lambda1 lambda2))) (cos (- lambda1 lambda2))))
157.0ms
(- 1 (+ (* 1/2 (pow phi2 2)) (* 1/2 (pow phi1 2))))

prune1.5s

Pruning

13 alts after pruning (13 fresh and 0 done)

Merged error: 3.6b

localize37.0ms

Local error

Found 4 expressions with local error:

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

rewrite28.0ms

Algorithm
rewrite-expression-head
Counts
4 → 63
Calls

4 calls. Slowest were:

11.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2)))))) R)
7.0ms
(* (sin lambda1) (sin lambda2))
7.0ms
(* (sin phi1) (sin phi2))

series246.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

85.0ms
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2)))))) R)
72.0ms
(* (sin lambda1) (sin lambda2))
57.0ms
(* (sin phi1) (sin phi2))
31.0ms
(acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))))))

simplify2.3s

Counts
32 → 75
Calls

32 calls. Slowest were:

318.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))))))))
284.0ms
(sqrt (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2)))))))
262.0ms
(acos (+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2)))))

prune1.8s

Pruning

18 alts after pruning (18 fresh and 0 done)

Merged error: 3.4b

localize32.0ms

Local error

Found 4 expressions with local error:

0.7b
(acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2))))
0.2b
(* (sin phi1) (sin phi2))
0.2b
(* (acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2)))) R)
0.2b
(fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2)))

rewrite14.0ms

Algorithm
rewrite-expression-head
Counts
4 → 53
Calls

4 calls. Slowest were:

7.0ms
(* (sin phi1) (sin phi2))
5.0ms
(* (acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2)))) R)
1.0ms
(acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2))))

series436.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

293.0ms
(fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2)))
68.0ms
(* (acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2)))) R)
60.0ms
(* (sin phi1) (sin phi2))
15.0ms
(acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2))))

simplify1.4s

Counts
23 → 65
Calls

23 calls. Slowest were:

245.0ms
(+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2))))
204.0ms
(+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (sin lambda2) (sin lambda1)))) (* (sin phi1) (sin phi2))))
122.0ms
(acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi1) (cos phi2)) (* (sin phi1) (sin phi2))))

prune1.7s

Pruning

18 alts after pruning (18 fresh and 0 done)

Merged error: 3.4b

localize10.0ms

Local error

Found 4 expressions with local error:

0.7b
(acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2))))
0.5b
(log (exp (acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2))))))
0.4b
(exp (acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2)))))
0.2b
(* (sin phi1) (sin phi2))

rewrite12.0ms

Algorithm
rewrite-expression-head
Counts
4 → 62
Calls

4 calls. Slowest were:

5.0ms
(* (sin phi1) (sin phi2))
4.0ms
(log (exp (acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2))))))
1.0ms
(exp (acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2)))))

series144.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

72.0ms
(* (sin phi1) (sin phi2))
52.0ms
(exp (acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2)))))
10.0ms
(acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2))))
10.0ms
(log (exp (acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2))))))

simplify2.2s

Counts
34 → 74
Calls

34 calls. Slowest were:

163.0ms
(log (sqrt (exp (acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2)))))))
161.0ms
(acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda1) (sin lambda2))) (* (cos phi1) (cos phi2)) (* (sin phi1) (sin phi2))))
160.0ms
(acos (fma (fma (cos lambda2) (cos lambda1) (* (sin lambda2) (sin lambda1))) (* (cos phi2) (cos phi1)) (* (sin phi1) (sin phi2))))

prune2.3s

Pruning

19 alts after pruning (19 fresh and 0 done)

Merged error: 3.4b

regimes2.1s

Accuracy

0% (0.4b remaining)

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

bsearch5.0ms

end0.0ms

sample24.4s

Algorithm
intervals