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(R \cdot 2\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1, \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_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 \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \left(\cos \phi_1 \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\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 r1494268 = R;
double r1494269 = 2.0;
double r1494270 = phi1;
double r1494271 = phi2;
double r1494272 = r1494270 - r1494271;
double r1494273 = r1494272 / r1494269;
double r1494274 = sin(r1494273);
double r1494275 = pow(r1494274, r1494269);
double r1494276 = cos(r1494270);
double r1494277 = cos(r1494271);
double r1494278 = r1494276 * r1494277;
double r1494279 = lambda1;
double r1494280 = lambda2;
double r1494281 = r1494279 - r1494280;
double r1494282 = r1494281 / r1494269;
double r1494283 = sin(r1494282);
double r1494284 = r1494278 * r1494283;
double r1494285 = r1494284 * r1494283;
double r1494286 = r1494275 + r1494285;
double r1494287 = sqrt(r1494286);
double r1494288 = 1.0;
double r1494289 = r1494288 - r1494286;
double r1494290 = sqrt(r1494289);
double r1494291 = atan2(r1494287, r1494290);
double r1494292 = r1494269 * r1494291;
double r1494293 = r1494268 * r1494292;
return r1494293;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1494294 = R;
double r1494295 = 2.0;
double r1494296 = r1494294 * r1494295;
double r1494297 = phi2;
double r1494298 = cos(r1494297);
double r1494299 = lambda1;
double r1494300 = lambda2;
double r1494301 = r1494299 - r1494300;
double r1494302 = r1494301 / r1494295;
double r1494303 = sin(r1494302);
double r1494304 = r1494298 * r1494303;
double r1494305 = phi1;
double r1494306 = cos(r1494305);
double r1494307 = r1494303 * r1494306;
double r1494308 = r1494305 - r1494297;
double r1494309 = r1494308 / r1494295;
double r1494310 = sin(r1494309);
double r1494311 = r1494310 * r1494310;
double r1494312 = fma(r1494304, r1494307, r1494311);
double r1494313 = sqrt(r1494312);
double r1494314 = cos(r1494309);
double r1494315 = r1494314 * r1494314;
double r1494316 = r1494303 * r1494303;
double r1494317 = r1494303 * r1494316;
double r1494318 = cbrt(r1494317);
double r1494319 = r1494306 * r1494318;
double r1494320 = r1494304 * r1494319;
double r1494321 = r1494315 - r1494320;
double r1494322 = sqrt(r1494321);
double r1494323 = atan2(r1494313, r1494322);
double r1494324 = r1494296 * r1494323;
return r1494324;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 24.1
Simplified24.0
rmApplied add-cbrt-cube24.0
Final simplification24.0
herbie shell --seed 2019151 +o rules:numerics
(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))))))))))