\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\log \left(e^{\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 \lambda_2\right)\right)}\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r26703 = phi1;
double r26704 = sin(r26703);
double r26705 = phi2;
double r26706 = sin(r26705);
double r26707 = r26704 * r26706;
double r26708 = cos(r26703);
double r26709 = cos(r26705);
double r26710 = r26708 * r26709;
double r26711 = lambda1;
double r26712 = lambda2;
double r26713 = r26711 - r26712;
double r26714 = cos(r26713);
double r26715 = r26710 * r26714;
double r26716 = r26707 + r26715;
double r26717 = acos(r26716);
double r26718 = R;
double r26719 = r26717 * r26718;
return r26719;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r26720 = phi1;
double r26721 = sin(r26720);
double r26722 = phi2;
double r26723 = sin(r26722);
double r26724 = r26721 * r26723;
double r26725 = cos(r26720);
double r26726 = cos(r26722);
double r26727 = r26725 * r26726;
double r26728 = lambda1;
double r26729 = cos(r26728);
double r26730 = lambda2;
double r26731 = cos(r26730);
double r26732 = r26729 * r26731;
double r26733 = sin(r26728);
double r26734 = sin(r26730);
double r26735 = r26733 * r26734;
double r26736 = r26732 + r26735;
double r26737 = r26727 * r26736;
double r26738 = r26724 + r26737;
double r26739 = acos(r26738);
double r26740 = exp(r26739);
double r26741 = log(r26740);
double r26742 = R;
double r26743 = r26741 * r26742;
return r26743;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 16.9
rmApplied cos-diff3.9
rmApplied add-log-exp3.9
Final simplification3.9
herbie shell --seed 2020065 +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))