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{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) + {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}}}{\sqrt{1 - \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) + {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3513342 = R;
double r3513343 = 2.0;
double r3513344 = phi1;
double r3513345 = phi2;
double r3513346 = r3513344 - r3513345;
double r3513347 = r3513346 / r3513343;
double r3513348 = sin(r3513347);
double r3513349 = pow(r3513348, r3513343);
double r3513350 = cos(r3513344);
double r3513351 = cos(r3513345);
double r3513352 = r3513350 * r3513351;
double r3513353 = lambda1;
double r3513354 = lambda2;
double r3513355 = r3513353 - r3513354;
double r3513356 = r3513355 / r3513343;
double r3513357 = sin(r3513356);
double r3513358 = r3513352 * r3513357;
double r3513359 = r3513358 * r3513357;
double r3513360 = r3513349 + r3513359;
double r3513361 = sqrt(r3513360);
double r3513362 = 1.0;
double r3513363 = r3513362 - r3513360;
double r3513364 = sqrt(r3513363);
double r3513365 = atan2(r3513361, r3513364);
double r3513366 = r3513343 * r3513365;
double r3513367 = r3513342 * r3513366;
return r3513367;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3513368 = R;
double r3513369 = 2.0;
double r3513370 = lambda1;
double r3513371 = lambda2;
double r3513372 = r3513370 - r3513371;
double r3513373 = r3513372 / r3513369;
double r3513374 = sin(r3513373);
double r3513375 = phi2;
double r3513376 = cos(r3513375);
double r3513377 = phi1;
double r3513378 = cos(r3513377);
double r3513379 = r3513376 * r3513378;
double r3513380 = r3513379 * r3513374;
double r3513381 = r3513374 * r3513380;
double r3513382 = r3513377 - r3513375;
double r3513383 = r3513382 / r3513369;
double r3513384 = sin(r3513383);
double r3513385 = pow(r3513384, r3513369);
double r3513386 = r3513381 + r3513385;
double r3513387 = sqrt(r3513386);
double r3513388 = 1.0;
double r3513389 = r3513388 - r3513386;
double r3513390 = sqrt(r3513389);
double r3513391 = atan2(r3513387, r3513390);
double r3513392 = r3513369 * r3513391;
double r3513393 = r3513368 * r3513392;
return r3513393;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.2
Final simplification24.2
herbie shell --seed 2019162 +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))))))))))