\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 RR \cdot \left(\frac{\pi}{2} - \sin^{-1} \left(\mathsf{fma}\left(\sin \phi_2, \sin \phi_1, \left(\log \left(e^{\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot \cos \phi_2\right) \cdot \cos \phi_1\right)\right)\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r465921 = phi1;
double r465922 = sin(r465921);
double r465923 = phi2;
double r465924 = sin(r465923);
double r465925 = r465922 * r465924;
double r465926 = cos(r465921);
double r465927 = cos(r465923);
double r465928 = r465926 * r465927;
double r465929 = lambda1;
double r465930 = lambda2;
double r465931 = r465929 - r465930;
double r465932 = cos(r465931);
double r465933 = r465928 * r465932;
double r465934 = r465925 + r465933;
double r465935 = acos(r465934);
double r465936 = R;
double r465937 = r465935 * r465936;
return r465937;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r465938 = R;
double r465939 = atan2(1.0, 0.0);
double r465940 = 2.0;
double r465941 = r465939 / r465940;
double r465942 = phi2;
double r465943 = sin(r465942);
double r465944 = phi1;
double r465945 = sin(r465944);
double r465946 = lambda2;
double r465947 = sin(r465946);
double r465948 = lambda1;
double r465949 = sin(r465948);
double r465950 = cos(r465948);
double r465951 = cos(r465946);
double r465952 = r465950 * r465951;
double r465953 = fma(r465947, r465949, r465952);
double r465954 = exp(r465953);
double r465955 = log(r465954);
double r465956 = cos(r465942);
double r465957 = r465955 * r465956;
double r465958 = cos(r465944);
double r465959 = r465957 * r465958;
double r465960 = fma(r465943, r465945, r465959);
double r465961 = asin(r465960);
double r465962 = r465941 - r465961;
double r465963 = r465938 * r465962;
return r465963;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 16.7
rmApplied cos-diff3.8
rmApplied add-log-exp3.9
Simplified3.8
rmApplied acos-asin3.9
Applied exp-diff3.9
Applied log-div3.9
Simplified3.9
Simplified3.9
rmApplied add-log-exp4.0
Final simplification4.0
herbie shell --seed 2019155 +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))