\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 Re^{\log \left(\mathsf{log1p}\left(\mathsf{expm1}\left(\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right)\right)} \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r22820 = phi1;
double r22821 = sin(r22820);
double r22822 = phi2;
double r22823 = sin(r22822);
double r22824 = r22821 * r22823;
double r22825 = cos(r22820);
double r22826 = cos(r22822);
double r22827 = r22825 * r22826;
double r22828 = lambda1;
double r22829 = lambda2;
double r22830 = r22828 - r22829;
double r22831 = cos(r22830);
double r22832 = r22827 * r22831;
double r22833 = r22824 + r22832;
double r22834 = acos(r22833);
double r22835 = R;
double r22836 = r22834 * r22835;
return r22836;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r22837 = phi1;
double r22838 = sin(r22837);
double r22839 = phi2;
double r22840 = sin(r22839);
double r22841 = r22838 * r22840;
double r22842 = cos(r22837);
double r22843 = cos(r22839);
double r22844 = r22842 * r22843;
double r22845 = lambda1;
double r22846 = cos(r22845);
double r22847 = lambda2;
double r22848 = cos(r22847);
double r22849 = r22846 * r22848;
double r22850 = sin(r22845);
double r22851 = -r22847;
double r22852 = sin(r22851);
double r22853 = r22850 * r22852;
double r22854 = r22849 - r22853;
double r22855 = r22844 * r22854;
double r22856 = r22841 + r22855;
double r22857 = acos(r22856);
double r22858 = expm1(r22857);
double r22859 = log1p(r22858);
double r22860 = log(r22859);
double r22861 = exp(r22860);
double r22862 = R;
double r22863 = r22861 * r22862;
return r22863;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 17.3
rmApplied sub-neg17.3
Applied cos-sum3.8
Simplified3.8
rmApplied add-exp-log3.8
rmApplied add-log-exp3.8
rmApplied log1p-expm1-u3.8
Simplified3.8
Final simplification3.8
herbie shell --seed 2019353 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Spherical law of cosines"
:precision binary64
(* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))