


Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 17.2
Simplified17.2
rmApplied cos-diff3.9
rmApplied add-log-exp3.9
rmApplied fma-udef3.9
Final simplification3.9
herbie shell --seed 2019008 +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))
Time bar (total: 49.4s)Debug log
1 calls. Slowest were:
| 74.0ms | (* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R) |
2 alts after pruning (2 fresh and 0 done)
Merged error: 17.2b
Found 4 expressions with local error:
| 2.7b | (cos (- lambda1 lambda2)) |
| 0.5b | (acos (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1)))) |
| 0.2b | (* R (acos (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1))))) |
| 0.2b | (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1))) |
4 calls. Slowest were:
| 3.0ms | (cos (- lambda1 lambda2)) |
| 1.0ms | (* R (acos (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1))))) |
| 1.0ms | (acos (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1)))) |
4 calls. Slowest were:
| 190.0ms | (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1))) |
| 31.0ms | (cos (- lambda1 lambda2)) |
| 26.0ms | (* R (acos (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1))))) |
| 10.0ms | (acos (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi2) (sin phi1)))) |
18 calls. Slowest were:
| 83.0ms | (- (+ 1 (* lambda2 lambda1)) (* 1/2 (pow lambda1 2))) |
| 50.0ms | (- (+ (* phi1 phi2) 1) (* 1/2 (pow phi1 2))) |
| 39.0ms | (* R (acos (fma (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2)) (* (sin phi1) (sin phi2))))) |
15 alts after pruning (15 fresh and 0 done)
Merged error: 4.2b
Found 4 expressions with local error:
| 0.5b | (acos (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 | (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1))) |
| 0.2b | (* (sin phi2) (sin phi1)) |
4 calls. Slowest were:
| 4.0ms | (* (sin phi2) (sin phi1)) |
| 1.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)))) |
4 calls. Slowest were:
| 354.0ms | (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1))) |
| 69.0ms | (* (sin phi2) (sin phi1)) |
| 46.0ms | (* R (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1))))) |
| 14.0ms | (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1)))) |
24 calls. Slowest were:
| 313.0ms | (acos (fma (* (cos phi1) (cos phi2)) (+ (* (sin lambda2) (sin lambda1)) (* (cos lambda1) (cos lambda2))) (* (sin phi1) (sin phi2)))) |
| 248.0ms | (acos (fma (* (cos phi1) (cos phi2)) (+ (* (sin lambda1) (sin lambda2)) (* (cos lambda1) (cos lambda2))) (* (sin phi1) (sin phi2)))) |
| 239.0ms | (acos (fma (* (cos phi1) (cos phi2)) (+ (* (sin lambda1) (sin lambda2)) (* (cos lambda1) (cos lambda2))) (* (sin phi1) (sin phi2)))) |
16 alts after pruning (16 fresh and 0 done)
Merged error: 4.1b
Found 4 expressions with local error:
| 0.5b | (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1)))) |
| 0.4b | (exp (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1))))) |
| 0.3b | (log (exp (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1)))))) |
| 0.2b | (* R (log (exp (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1))))))) |
4 calls. Slowest were:
| 7.0ms | (* R (log (exp (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1))))))) |
| 4.0ms | (log (exp (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1)))))) |
| 3.0ms | (exp (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1))))) |
4 calls. Slowest were:
| 61.0ms | (exp (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1))))) |
| 29.0ms | (* R (log (exp (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)))) |
| 16.0ms | (log (exp (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1)))))) |
38 calls. Slowest were:
| 314.0ms | (* (log (exp (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1)))))) R) |
| 301.0ms | (log (exp (sqrt (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (* (sin phi2) (sin phi1))))))) |
| 299.0ms | (* R (acos (fma (* (cos phi1) (cos phi2)) (+ (* (sin lambda2) (sin lambda1)) (* (cos lambda1) (cos lambda2))) (* (sin phi1) (sin phi2))))) |
19 alts after pruning (19 fresh and 0 done)
Merged error: 4.0b
Found 4 expressions with local error:
| 3.8b | (log (exp (* (sin phi2) (sin phi1)))) |
| 0.5b | (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (log (exp (* (sin phi2) (sin phi1)))))) |
| 0.2b | (* R (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (log (exp (* (sin phi2) (sin phi1))))))) |
| 0.2b | (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (log (exp (* (sin phi2) (sin phi1))))) |
4 calls. Slowest were:
| 5.0ms | (log (exp (* (sin phi2) (sin phi1)))) |
| 3.0ms | (* R (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (log (exp (* (sin phi2) (sin phi1))))))) |
| 1.0ms | (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (log (exp (* (sin phi2) (sin phi1)))))) |
4 calls. Slowest were:
| 313.0ms | (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (log (exp (* (sin phi2) (sin phi1))))) |
| 62.0ms | (log (exp (* (sin phi2) (sin phi1)))) |
| 33.0ms | (* R (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (log (exp (* (sin phi2) (sin phi1))))))) |
| 21.0ms | (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (log (exp (* (sin phi2) (sin phi1)))))) |
21 calls. Slowest were:
| 571.0ms | (acos (fma (* (cos phi1) (cos phi2)) (+ (* (sin lambda2) (sin lambda1)) (* (cos lambda1) (cos lambda2))) (* (sin phi1) (sin phi2)))) |
| 313.0ms | (acos (fma (* (cos phi1) (cos phi2)) (+ (* (sin lambda1) (sin lambda2)) (* (cos lambda1) (cos lambda2))) (* (sin phi1) (sin phi2)))) |
| 250.0ms | (acos (fma (* (cos phi1) (cos phi2)) (+ (* (cos lambda1) (cos lambda2)) (* (sin lambda1) (sin lambda2))) (log (exp (* (sin phi2) (sin phi1)))))) |
19 alts after pruning (19 fresh and 0 done)
Merged error: 4.0b
0% (0.4b remaining)
Error of 3.9b against oracle of 3.6b and baseline of 3.9b