\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 \cos^{-1} \left(\left(\cos \lambda_1 \cdot \cos \lambda_2 + \log \left(e^{\sin \lambda_1 \cdot \sin \lambda_2}\right)\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \phi_2 \cdot \sin \phi_1\right)\right)\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r364802 = phi1;
double r364803 = sin(r364802);
double r364804 = phi2;
double r364805 = sin(r364804);
double r364806 = r364803 * r364805;
double r364807 = cos(r364802);
double r364808 = cos(r364804);
double r364809 = r364807 * r364808;
double r364810 = lambda1;
double r364811 = lambda2;
double r364812 = r364810 - r364811;
double r364813 = cos(r364812);
double r364814 = r364809 * r364813;
double r364815 = r364806 + r364814;
double r364816 = acos(r364815);
double r364817 = R;
double r364818 = r364816 * r364817;
return r364818;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r364819 = R;
double r364820 = lambda1;
double r364821 = cos(r364820);
double r364822 = lambda2;
double r364823 = cos(r364822);
double r364824 = r364821 * r364823;
double r364825 = sin(r364820);
double r364826 = sin(r364822);
double r364827 = r364825 * r364826;
double r364828 = exp(r364827);
double r364829 = log(r364828);
double r364830 = r364824 + r364829;
double r364831 = phi1;
double r364832 = cos(r364831);
double r364833 = phi2;
double r364834 = cos(r364833);
double r364835 = r364832 * r364834;
double r364836 = r364830 * r364835;
double r364837 = sin(r364833);
double r364838 = sin(r364831);
double r364839 = r364837 * r364838;
double r364840 = log1p(r364839);
double r364841 = expm1(r364840);
double r364842 = r364836 + r364841;
double r364843 = acos(r364842);
double r364844 = r364819 * r364843;
return r364844;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.4
rmApplied cos-diff3.7
rmApplied expm1-log1p-u3.8
rmApplied add-log-exp3.8
Final simplification3.8
herbie shell --seed 2019142 +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))