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)\left(\tan^{-1}_* \frac{\sqrt{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right) + \left(\left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \left(\left(\cos \phi_2 \cdot \sqrt[3]{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \cos \phi_1\right)}} \cdot R\right) \cdot 2double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1712357 = R;
double r1712358 = 2.0;
double r1712359 = phi1;
double r1712360 = phi2;
double r1712361 = r1712359 - r1712360;
double r1712362 = r1712361 / r1712358;
double r1712363 = sin(r1712362);
double r1712364 = pow(r1712363, r1712358);
double r1712365 = cos(r1712359);
double r1712366 = cos(r1712360);
double r1712367 = r1712365 * r1712366;
double r1712368 = lambda1;
double r1712369 = lambda2;
double r1712370 = r1712368 - r1712369;
double r1712371 = r1712370 / r1712358;
double r1712372 = sin(r1712371);
double r1712373 = r1712367 * r1712372;
double r1712374 = r1712373 * r1712372;
double r1712375 = r1712364 + r1712374;
double r1712376 = sqrt(r1712375);
double r1712377 = 1.0;
double r1712378 = r1712377 - r1712375;
double r1712379 = sqrt(r1712378);
double r1712380 = atan2(r1712376, r1712379);
double r1712381 = r1712358 * r1712380;
double r1712382 = r1712357 * r1712381;
return r1712382;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1712383 = phi1;
double r1712384 = phi2;
double r1712385 = r1712383 - r1712384;
double r1712386 = 2.0;
double r1712387 = r1712385 / r1712386;
double r1712388 = sin(r1712387);
double r1712389 = r1712388 * r1712388;
double r1712390 = cos(r1712384);
double r1712391 = lambda1;
double r1712392 = lambda2;
double r1712393 = r1712391 - r1712392;
double r1712394 = r1712393 / r1712386;
double r1712395 = sin(r1712394);
double r1712396 = r1712390 * r1712395;
double r1712397 = cos(r1712383);
double r1712398 = r1712396 * r1712397;
double r1712399 = r1712398 * r1712395;
double r1712400 = r1712389 + r1712399;
double r1712401 = sqrt(r1712400);
double r1712402 = cos(r1712387);
double r1712403 = r1712402 * r1712402;
double r1712404 = exp(r1712395);
double r1712405 = log(r1712404);
double r1712406 = r1712395 * r1712395;
double r1712407 = r1712406 * r1712395;
double r1712408 = cbrt(r1712407);
double r1712409 = r1712390 * r1712408;
double r1712410 = r1712409 * r1712397;
double r1712411 = r1712405 * r1712410;
double r1712412 = r1712403 - r1712411;
double r1712413 = sqrt(r1712412);
double r1712414 = atan2(r1712401, r1712413);
double r1712415 = R;
double r1712416 = r1712414 * r1712415;
double r1712417 = r1712416 * r1712386;
return r1712417;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.1
Simplified24.0
rmApplied add-log-exp24.1
rmApplied add-cbrt-cube24.1
Final simplification24.1
herbie shell --seed 2019155
(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))))))))))