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 - \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 \sqrt[3]{{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}^{3}}\right) \cdot \sqrt[3]{{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}^{3}}\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r101361 = R;
double r101362 = 2.0;
double r101363 = phi1;
double r101364 = phi2;
double r101365 = r101363 - r101364;
double r101366 = r101365 / r101362;
double r101367 = sin(r101366);
double r101368 = pow(r101367, r101362);
double r101369 = cos(r101363);
double r101370 = cos(r101364);
double r101371 = r101369 * r101370;
double r101372 = lambda1;
double r101373 = lambda2;
double r101374 = r101372 - r101373;
double r101375 = r101374 / r101362;
double r101376 = sin(r101375);
double r101377 = r101371 * r101376;
double r101378 = r101377 * r101376;
double r101379 = r101368 + r101378;
double r101380 = sqrt(r101379);
double r101381 = 1.0;
double r101382 = r101381 - r101379;
double r101383 = sqrt(r101382);
double r101384 = atan2(r101380, r101383);
double r101385 = r101362 * r101384;
double r101386 = r101361 * r101385;
return r101386;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r101387 = R;
double r101388 = 2.0;
double r101389 = phi1;
double r101390 = phi2;
double r101391 = r101389 - r101390;
double r101392 = r101391 / r101388;
double r101393 = sin(r101392);
double r101394 = pow(r101393, r101388);
double r101395 = cos(r101389);
double r101396 = cos(r101390);
double r101397 = r101395 * r101396;
double r101398 = lambda1;
double r101399 = lambda2;
double r101400 = r101398 - r101399;
double r101401 = r101400 / r101388;
double r101402 = sin(r101401);
double r101403 = r101397 * r101402;
double r101404 = r101403 * r101402;
double r101405 = r101394 + r101404;
double r101406 = sqrt(r101405);
double r101407 = 1.0;
double r101408 = 3.0;
double r101409 = pow(r101402, r101408);
double r101410 = cbrt(r101409);
double r101411 = r101397 * r101410;
double r101412 = r101411 * r101410;
double r101413 = r101394 + r101412;
double r101414 = r101407 - r101413;
double r101415 = sqrt(r101414);
double r101416 = atan2(r101406, r101415);
double r101417 = r101388 * r101416;
double r101418 = r101387 * r101417;
return r101418;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.3
rmApplied add-cbrt-cube24.3
Simplified24.3
rmApplied add-cbrt-cube24.3
Simplified24.3
Final simplification24.3
herbie shell --seed 2019308
(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))))))))))