\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\cos^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \frac{\mathsf{fma}\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right), \cos \lambda_2 \cdot \cos \lambda_1, \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right) \cdot \left(\cos \phi_2 \cdot \cos \phi_1\right)}{\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) + \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right)}\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r648753 = phi1;
double r648754 = sin(r648753);
double r648755 = phi2;
double r648756 = sin(r648755);
double r648757 = r648754 * r648756;
double r648758 = cos(r648753);
double r648759 = cos(r648755);
double r648760 = r648758 * r648759;
double r648761 = lambda1;
double r648762 = lambda2;
double r648763 = r648761 - r648762;
double r648764 = cos(r648763);
double r648765 = r648760 * r648764;
double r648766 = r648757 + r648765;
double r648767 = acos(r648766);
double r648768 = R;
double r648769 = r648767 * r648768;
return r648769;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r648770 = phi2;
double r648771 = sin(r648770);
double r648772 = phi1;
double r648773 = sin(r648772);
double r648774 = r648771 * r648773;
double r648775 = lambda2;
double r648776 = cos(r648775);
double r648777 = lambda1;
double r648778 = cos(r648777);
double r648779 = r648776 * r648778;
double r648780 = r648779 * r648779;
double r648781 = expm1(r648780);
double r648782 = log1p(r648781);
double r648783 = sin(r648777);
double r648784 = sin(r648775);
double r648785 = r648783 * r648784;
double r648786 = r648785 * r648785;
double r648787 = r648785 * r648786;
double r648788 = fma(r648782, r648779, r648787);
double r648789 = cos(r648770);
double r648790 = cos(r648772);
double r648791 = r648789 * r648790;
double r648792 = r648788 * r648791;
double r648793 = r648785 * r648779;
double r648794 = r648786 - r648793;
double r648795 = r648780 + r648794;
double r648796 = r648792 / r648795;
double r648797 = r648774 + r648796;
double r648798 = acos(r648797);
double r648799 = R;
double r648800 = r648798 * r648799;
return r648800;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 16.9
rmApplied cos-diff4.1
rmApplied flip3-+4.1
Applied associate-*r/4.1
Simplified4.1
rmApplied log1p-expm1-u4.1
Final simplification4.1
herbie shell --seed 2019153 +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))