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)2 \cdot \left(R \cdot \tan^{-1}_* \frac{\sqrt{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right) + \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_2\right) \cdot \left(\cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\cos \phi_2 \cdot \log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)\right) \cdot \left(\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \cos \phi_1\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3655266 = R;
double r3655267 = 2.0;
double r3655268 = phi1;
double r3655269 = phi2;
double r3655270 = r3655268 - r3655269;
double r3655271 = r3655270 / r3655267;
double r3655272 = sin(r3655271);
double r3655273 = pow(r3655272, r3655267);
double r3655274 = cos(r3655268);
double r3655275 = cos(r3655269);
double r3655276 = r3655274 * r3655275;
double r3655277 = lambda1;
double r3655278 = lambda2;
double r3655279 = r3655277 - r3655278;
double r3655280 = r3655279 / r3655267;
double r3655281 = sin(r3655280);
double r3655282 = r3655276 * r3655281;
double r3655283 = r3655282 * r3655281;
double r3655284 = r3655273 + r3655283;
double r3655285 = sqrt(r3655284);
double r3655286 = 1.0;
double r3655287 = r3655286 - r3655284;
double r3655288 = sqrt(r3655287);
double r3655289 = atan2(r3655285, r3655288);
double r3655290 = r3655267 * r3655289;
double r3655291 = r3655266 * r3655290;
return r3655291;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3655292 = 2.0;
double r3655293 = R;
double r3655294 = phi1;
double r3655295 = phi2;
double r3655296 = r3655294 - r3655295;
double r3655297 = r3655296 / r3655292;
double r3655298 = sin(r3655297);
double r3655299 = r3655298 * r3655298;
double r3655300 = lambda1;
double r3655301 = lambda2;
double r3655302 = r3655300 - r3655301;
double r3655303 = r3655302 / r3655292;
double r3655304 = sin(r3655303);
double r3655305 = cos(r3655295);
double r3655306 = r3655304 * r3655305;
double r3655307 = cos(r3655294);
double r3655308 = r3655307 * r3655304;
double r3655309 = r3655306 * r3655308;
double r3655310 = r3655299 + r3655309;
double r3655311 = sqrt(r3655310);
double r3655312 = cos(r3655297);
double r3655313 = r3655312 * r3655312;
double r3655314 = exp(r3655304);
double r3655315 = log(r3655314);
double r3655316 = r3655305 * r3655315;
double r3655317 = r3655315 * r3655307;
double r3655318 = r3655316 * r3655317;
double r3655319 = r3655313 - r3655318;
double r3655320 = sqrt(r3655319);
double r3655321 = atan2(r3655311, r3655320);
double r3655322 = r3655293 * r3655321;
double r3655323 = r3655292 * r3655322;
return r3655323;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 23.7
Simplified23.7
rmApplied add-log-exp23.7
rmApplied add-log-exp23.7
Final simplification23.7
herbie shell --seed 2019158
(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))))))))))