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(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\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}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sqrt[3]{{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}^{3}}\right) \cdot \log \left(e^{\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 r85369 = R;
double r85370 = 2.0;
double r85371 = phi1;
double r85372 = phi2;
double r85373 = r85371 - r85372;
double r85374 = r85373 / r85370;
double r85375 = sin(r85374);
double r85376 = pow(r85375, r85370);
double r85377 = cos(r85371);
double r85378 = cos(r85372);
double r85379 = r85377 * r85378;
double r85380 = lambda1;
double r85381 = lambda2;
double r85382 = r85380 - r85381;
double r85383 = r85382 / r85370;
double r85384 = sin(r85383);
double r85385 = r85379 * r85384;
double r85386 = r85385 * r85384;
double r85387 = r85376 + r85386;
double r85388 = sqrt(r85387);
double r85389 = 1.0;
double r85390 = r85389 - r85387;
double r85391 = sqrt(r85390);
double r85392 = atan2(r85388, r85391);
double r85393 = r85370 * r85392;
double r85394 = r85369 * r85393;
return r85394;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r85395 = R;
double r85396 = 2.0;
double r85397 = phi1;
double r85398 = r85397 / r85396;
double r85399 = sin(r85398);
double r85400 = phi2;
double r85401 = r85400 / r85396;
double r85402 = cos(r85401);
double r85403 = r85399 * r85402;
double r85404 = cos(r85398);
double r85405 = sin(r85401);
double r85406 = r85404 * r85405;
double r85407 = r85403 - r85406;
double r85408 = pow(r85407, r85396);
double r85409 = cos(r85397);
double r85410 = cos(r85400);
double r85411 = r85409 * r85410;
double r85412 = lambda1;
double r85413 = lambda2;
double r85414 = r85412 - r85413;
double r85415 = r85414 / r85396;
double r85416 = sin(r85415);
double r85417 = r85411 * r85416;
double r85418 = r85417 * r85416;
double r85419 = r85408 + r85418;
double r85420 = sqrt(r85419);
double r85421 = 1.0;
double r85422 = 3.0;
double r85423 = pow(r85416, r85422);
double r85424 = cbrt(r85423);
double r85425 = r85411 * r85424;
double r85426 = exp(r85416);
double r85427 = log(r85426);
double r85428 = r85425 * r85427;
double r85429 = r85408 + r85428;
double r85430 = r85421 - r85429;
double r85431 = sqrt(r85430);
double r85432 = atan2(r85420, r85431);
double r85433 = r85396 * r85432;
double r85434 = r85395 * r85433;
return r85434;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.7
rmApplied div-sub24.7
Applied sin-diff24.0
rmApplied div-sub24.0
Applied sin-diff14.2
rmApplied add-log-exp14.2
rmApplied add-cbrt-cube14.2
Simplified14.2
Final simplification14.2
herbie shell --seed 2019351
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
:precision binary64
(* 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))))))))))