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 \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r62314 = R;
double r62315 = 2.0;
double r62316 = phi1;
double r62317 = phi2;
double r62318 = r62316 - r62317;
double r62319 = r62318 / r62315;
double r62320 = sin(r62319);
double r62321 = pow(r62320, r62315);
double r62322 = cos(r62316);
double r62323 = cos(r62317);
double r62324 = r62322 * r62323;
double r62325 = lambda1;
double r62326 = lambda2;
double r62327 = r62325 - r62326;
double r62328 = r62327 / r62315;
double r62329 = sin(r62328);
double r62330 = r62324 * r62329;
double r62331 = r62330 * r62329;
double r62332 = r62321 + r62331;
double r62333 = sqrt(r62332);
double r62334 = 1.0;
double r62335 = r62334 - r62332;
double r62336 = sqrt(r62335);
double r62337 = atan2(r62333, r62336);
double r62338 = r62315 * r62337;
double r62339 = r62314 * r62338;
return r62339;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r62340 = R;
double r62341 = 2.0;
double r62342 = phi1;
double r62343 = r62342 / r62341;
double r62344 = sin(r62343);
double r62345 = phi2;
double r62346 = r62345 / r62341;
double r62347 = cos(r62346);
double r62348 = r62344 * r62347;
double r62349 = cos(r62343);
double r62350 = sin(r62346);
double r62351 = r62349 * r62350;
double r62352 = r62348 - r62351;
double r62353 = pow(r62352, r62341);
double r62354 = cos(r62342);
double r62355 = cos(r62345);
double r62356 = r62354 * r62355;
double r62357 = lambda1;
double r62358 = lambda2;
double r62359 = r62357 - r62358;
double r62360 = r62359 / r62341;
double r62361 = sin(r62360);
double r62362 = r62356 * r62361;
double r62363 = r62362 * r62361;
double r62364 = r62353 + r62363;
double r62365 = sqrt(r62364);
double r62366 = 1.0;
double r62367 = 3.0;
double r62368 = pow(r62361, r62367);
double r62369 = cbrt(r62368);
double r62370 = r62356 * r62369;
double r62371 = r62370 * r62361;
double r62372 = r62353 + r62371;
double r62373 = r62366 - r62372;
double r62374 = sqrt(r62373);
double r62375 = atan2(r62365, r62374);
double r62376 = r62341 * r62375;
double r62377 = r62340 * r62376;
return r62377;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.4
rmApplied div-sub24.4
Applied sin-diff23.8
rmApplied div-sub23.8
Applied sin-diff13.7
rmApplied add-cbrt-cube13.7
Simplified13.7
Final simplification13.7
herbie shell --seed 2020046
(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))))))))))