\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\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) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r22816 = phi1;
double r22817 = sin(r22816);
double r22818 = phi2;
double r22819 = sin(r22818);
double r22820 = r22817 * r22819;
double r22821 = cos(r22816);
double r22822 = cos(r22818);
double r22823 = r22821 * r22822;
double r22824 = lambda1;
double r22825 = lambda2;
double r22826 = r22824 - r22825;
double r22827 = cos(r22826);
double r22828 = r22823 * r22827;
double r22829 = r22820 + r22828;
double r22830 = acos(r22829);
double r22831 = R;
double r22832 = r22830 * r22831;
return r22832;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r22833 = phi1;
double r22834 = sin(r22833);
double r22835 = phi2;
double r22836 = sin(r22835);
double r22837 = r22834 * r22836;
double r22838 = cos(r22833);
double r22839 = cos(r22835);
double r22840 = r22838 * r22839;
double r22841 = lambda1;
double r22842 = cos(r22841);
double r22843 = lambda2;
double r22844 = cos(r22843);
double r22845 = r22842 * r22844;
double r22846 = sin(r22841);
double r22847 = -r22843;
double r22848 = sin(r22847);
double r22849 = r22846 * r22848;
double r22850 = r22845 - r22849;
double r22851 = r22840 * r22850;
double r22852 = r22837 + r22851;
double r22853 = acos(r22852);
double r22854 = expm1(r22853);
double r22855 = log1p(r22854);
double r22856 = R;
double r22857 = r22855 * r22856;
return r22857;
}



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-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))