R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\cos \left(\frac{\phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}{\sqrt{1 - \left({\left(\cos \left(\frac{\phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2957018 = R;
double r2957019 = 2.0;
double r2957020 = phi1;
double r2957021 = phi2;
double r2957022 = r2957020 - r2957021;
double r2957023 = r2957022 / r2957019;
double r2957024 = sin(r2957023);
double r2957025 = pow(r2957024, r2957019);
double r2957026 = cos(r2957020);
double r2957027 = cos(r2957021);
double r2957028 = r2957026 * r2957027;
double r2957029 = lambda1;
double r2957030 = lambda2;
double r2957031 = r2957029 - r2957030;
double r2957032 = r2957031 / r2957019;
double r2957033 = sin(r2957032);
double r2957034 = r2957028 * r2957033;
double r2957035 = r2957034 * r2957033;
double r2957036 = r2957025 + r2957035;
double r2957037 = sqrt(r2957036);
double r2957038 = 1.0;
double r2957039 = r2957038 - r2957036;
double r2957040 = sqrt(r2957039);
double r2957041 = atan2(r2957037, r2957040);
double r2957042 = r2957019 * r2957041;
double r2957043 = r2957018 * r2957042;
return r2957043;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2957044 = R;
double r2957045 = 2.0;
double r2957046 = phi2;
double r2957047 = r2957046 / r2957045;
double r2957048 = cos(r2957047);
double r2957049 = phi1;
double r2957050 = r2957049 / r2957045;
double r2957051 = sin(r2957050);
double r2957052 = r2957048 * r2957051;
double r2957053 = cos(r2957050);
double r2957054 = sin(r2957047);
double r2957055 = r2957053 * r2957054;
double r2957056 = r2957052 - r2957055;
double r2957057 = pow(r2957056, r2957045);
double r2957058 = lambda1;
double r2957059 = lambda2;
double r2957060 = r2957058 - r2957059;
double r2957061 = r2957060 / r2957045;
double r2957062 = sin(r2957061);
double r2957063 = cos(r2957046);
double r2957064 = cos(r2957049);
double r2957065 = r2957063 * r2957064;
double r2957066 = r2957065 * r2957062;
double r2957067 = r2957062 * r2957066;
double r2957068 = r2957057 + r2957067;
double r2957069 = sqrt(r2957068);
double r2957070 = 1.0;
double r2957071 = r2957070 - r2957068;
double r2957072 = sqrt(r2957071);
double r2957073 = atan2(r2957069, r2957072);
double r2957074 = r2957045 * r2957073;
double r2957075 = r2957044 * r2957074;
return r2957075;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.6
rmApplied div-sub24.6
Applied sin-diff24.0
rmApplied div-sub24.0
Applied sin-diff14.0
Final simplification14.0
herbie shell --seed 2019144
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
(* R (* 2 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))) (sqrt (- 1 (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))))))))