Average Error: 17.0 → 4.1
Time: 47.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\]
\[\cos^{-1} \left(\log_* (1 + (e^{(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\sin \phi_2 \cdot \sin \phi_1\right))_*} - 1)^*)\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. Simplified17.0

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

    \[\leadsto R \cdot \cos^{-1} \left((\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)} + \left(\sin \phi_2 \cdot \sin \phi_1\right))_*\right)\]
  5. Using strategy rm
  6. Applied log1p-expm1-u4.1

    \[\leadsto R \cdot \cos^{-1} \color{blue}{\left(\log_* (1 + (e^{(\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) + \left(\sin \phi_2 \cdot \sin \phi_1\right))_*} - 1)^*)\right)}\]
  7. Final simplification4.1

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

Reproduce

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

sample1.1s

Algorithm
intervals
Results
768.0ms154×body1280valid
172.0ms65×body640valid
25.0ms18×body320valid
8.0ms10×body160valid
4.0msbody80valid

simplify37.0ms

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

prune29.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 15.5b

localize72.0ms

Local error

Found 4 expressions with local error:

4.2b
(cos (- lambda1 lambda2))
0.6b
(acos (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1))))
0.3b
(fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1)))
0.2b
(* (sin phi2) (sin phi1))

rewrite10.0ms

Algorithm
rewrite-expression-head
Rules
add-cube-cbrt
add-exp-log
add-cbrt-cube
*-un-lft-identity
pow1
add-sqr-sqrt
add-log-exp
log1p-expm1-u
expm1-log1p-u
associate-*l*
associate-*r*
cos-sum
sin-mult
fma-udef
cbrt-unprod
*-commutative
prod-exp
pow-prod-down
sub-neg
cos-diff
acos-asin
Counts
4 → 52
Calls
4 calls:
Slowest
4.0ms
(* (sin phi2) (sin phi1))
3.0ms
(cos (- lambda1 lambda2))
1.0ms
(acos (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1))))
0.0ms
(fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1)))

series300.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
186.0ms
(fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1)))
72.0ms
(* (sin phi2) (sin phi1))
32.0ms
(cos (- lambda1 lambda2))
10.0ms
(acos (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1))))

simplify428.0ms

Counts
24 → 64
Calls
24 calls:
Slowest
96.0ms
(* (* (* (sin phi2) (sin phi2)) (sin phi2)) (* (* (sin phi1) (sin phi1)) (sin phi1)))
85.0ms
(- (+ 1 (* lambda2 lambda1)) (* 1/2 (pow lambda1 2)))
77.0ms
(- (+ (* phi1 phi2) 1) (* 1/2 (pow phi1 2)))
35.0ms
(acos (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi1) (sin phi2))))
26.0ms
(acos (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi1) (sin phi2))))

prune1.3s

Pruning

11 alts after pruning (11 fresh and 0 done)

Merged error: 2.3b

localize63.0ms

Local error

Found 4 expressions with local error:

0.6b
(acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1))))
0.3b
(fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1)))
0.2b
(* R (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1)))))
0.2b
(* (sin phi2) (sin phi1))

rewrite11.0ms

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

series413.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
297.0ms
(fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1)))
55.0ms
(* (sin phi2) (sin phi1))
40.0ms
(* R (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1)))))
21.0ms
(acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1))))

simplify2.7s

Counts
24 → 65
Calls
24 calls:
Slowest
296.0ms
(* (acos (fma (* (cos phi1) (cos phi2)) (+ (* (sin lambda1) (sin lambda2)) (* (cos lambda1) (cos lambda2))) (* (sin phi1) (sin phi2)))) R)
280.0ms
(* R (acos (fma (* (cos phi1) (cos phi2)) (+ (* (sin lambda2) (sin lambda1)) (* (cos lambda1) (cos lambda2))) (* (sin phi1) (sin phi2)))))
252.0ms
(* (acos (fma (* (cos phi1) (cos phi2)) (+ (* (sin lambda1) (sin lambda2)) (* (cos lambda1) (cos lambda2))) (* (sin phi1) (sin phi2)))) R)
234.0ms
(acos (fma (* (cos phi1) (cos phi2)) (+ (* (sin lambda2) (sin lambda1)) (* (cos lambda1) (cos lambda2))) (* (sin phi1) (sin phi2))))
228.0ms
(+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (sin lambda2) (sin lambda1)))) (* (sin phi1) (sin phi2))))

prune1.5s

Pruning

15 alts after pruning (15 fresh and 0 done)

Merged error: 2.1b

localize18.0ms

Local error

Found 4 expressions with local error:

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

rewrite10.0ms

Algorithm
rewrite-expression-head
Rules
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
add-exp-log
associate-*r*
add-cbrt-cube
pow1
add-log-exp
log1p-expm1-u
expm1-log1p-u
associate-*l*
*-commutative
sin-mult
fma-udef
cbrt-unprod
prod-exp
pow-prod-down
acos-asin
Counts
4 → 53
Calls
4 calls:
Slowest
7.0ms
(* (sin phi2) (sin phi1))
1.0ms
(* R (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))))
1.0ms
(acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1))))
0.0ms
(fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))

series457.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
348.0ms
(fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))
72.0ms
(* (sin phi2) (sin phi1))
26.0ms
(* R (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))))
10.0ms
(acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1))))

simplify1.5s

Counts
24 → 65
Calls
24 calls:
Slowest
237.0ms
(+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (sin lambda2) (sin lambda1)))) (* (sin phi1) (sin phi2))))
201.0ms
(+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2))))
133.0ms
(cbrt (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))))
129.0ms
(sqrt (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))))
125.0ms
(* (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi1) (cos phi2)) (* (sin phi1) (sin phi2)))) R)

prune1.7s

Pruning

15 alts after pruning (15 fresh and 0 done)

Merged error: 2.1b

localize12.0ms

Local error

Found 4 expressions with local error:

0.6b
(acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1))))
0.4b
(log (exp (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1))))))
0.4b
(exp (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))))
0.3b
(fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))

rewrite5.0ms

Algorithm
rewrite-expression-head
Rules
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
exp-prod
add-log-exp
pow1
log1p-expm1-u
log-pow
add-exp-log
add-cbrt-cube
expm1-log1p-u
log-prod
acos-asin
exp-diff
rem-exp-log
fma-udef
rem-log-exp
log-div
Counts
4 → 52
Calls
4 calls:
Slowest
2.0ms
(log (exp (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1))))))
2.0ms
(exp (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))))
1.0ms
(acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1))))
0.0ms
(fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))

series348.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
291.0ms
(fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))
33.0ms
(exp (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))))
13.0ms
(acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1))))
10.0ms
(log (exp (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1))))))

simplify2.5s

Counts
25 → 64
Calls
25 calls:
Slowest
233.0ms
(+ (* (cos phi1) (* (cos phi2) (* (sin lambda1) (sin lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (* (sin phi1) (sin phi2))))
180.0ms
(+ (* (cos phi1) (* (cos phi2) (* (cos lambda1) (cos lambda2)))) (+ (* (cos phi1) (* (cos phi2) (* (sin lambda2) (sin lambda1)))) (* (sin phi1) (sin phi2))))
140.0ms
(acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi1) (cos phi2)) (* (sin phi1) (sin phi2))))
139.0ms
(acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi1) (cos phi2)) (* (sin phi1) (sin phi2))))
135.0ms
(exp (* (cbrt (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1))))) (cbrt (acos (fma (fma (sin lambda1) (sin lambda2) (* (cos lambda1) (cos lambda2))) (* (cos phi2) (cos phi1)) (* (sin phi2) (sin phi1)))))))

prune1.6s

Pruning

20 alts after pruning (20 fresh and 0 done)

Merged error: 2.1b

regimes1.5s

Accuracy

0% (0.4b remaining)

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

bsearch5.0ms

end0.0ms

sample24.0s

Algorithm
intervals
Results
17.0s4739×body1280valid
4.9s2083×body640valid
1.1s731×body320valid
552.0ms294×body160valid
58.0ms147×body80valid
43.0msbody2560valid