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(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1\right) \cdot \left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}{\sqrt{\sqrt[3]{\left(\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right)\right) \cdot \left(\left(\sqrt[3]{\cos \left(\frac{\phi_1 - \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 - \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\cos \left(\frac{\phi_1 - \phi_2}{2}\right)}\right)} \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1\right) \cdot \left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}} \cdot 2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3690382 = R;
double r3690383 = 2.0;
double r3690384 = phi1;
double r3690385 = phi2;
double r3690386 = r3690384 - r3690385;
double r3690387 = r3690386 / r3690383;
double r3690388 = sin(r3690387);
double r3690389 = pow(r3690388, r3690383);
double r3690390 = cos(r3690384);
double r3690391 = cos(r3690385);
double r3690392 = r3690390 * r3690391;
double r3690393 = lambda1;
double r3690394 = lambda2;
double r3690395 = r3690393 - r3690394;
double r3690396 = r3690395 / r3690383;
double r3690397 = sin(r3690396);
double r3690398 = r3690392 * r3690397;
double r3690399 = r3690398 * r3690397;
double r3690400 = r3690389 + r3690399;
double r3690401 = sqrt(r3690400);
double r3690402 = 1.0;
double r3690403 = r3690402 - r3690400;
double r3690404 = sqrt(r3690403);
double r3690405 = atan2(r3690401, r3690404);
double r3690406 = r3690383 * r3690405;
double r3690407 = r3690382 * r3690406;
return r3690407;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3690408 = phi1;
double r3690409 = phi2;
double r3690410 = r3690408 - r3690409;
double r3690411 = 2.0;
double r3690412 = r3690410 / r3690411;
double r3690413 = sin(r3690412);
double r3690414 = r3690413 * r3690413;
double r3690415 = lambda1;
double r3690416 = lambda2;
double r3690417 = r3690415 - r3690416;
double r3690418 = r3690417 / r3690411;
double r3690419 = sin(r3690418);
double r3690420 = cos(r3690408);
double r3690421 = r3690419 * r3690420;
double r3690422 = cos(r3690409);
double r3690423 = r3690422 * r3690419;
double r3690424 = r3690421 * r3690423;
double r3690425 = r3690414 + r3690424;
double r3690426 = sqrt(r3690425);
double r3690427 = cos(r3690412);
double r3690428 = r3690427 * r3690427;
double r3690429 = cbrt(r3690427);
double r3690430 = r3690429 * r3690429;
double r3690431 = r3690430 * r3690429;
double r3690432 = r3690428 * r3690431;
double r3690433 = cbrt(r3690432);
double r3690434 = r3690433 * r3690427;
double r3690435 = r3690434 - r3690424;
double r3690436 = sqrt(r3690435);
double r3690437 = atan2(r3690426, r3690436);
double r3690438 = r3690437 * r3690411;
double r3690439 = R;
double r3690440 = r3690438 * r3690439;
return r3690440;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.5
Simplified24.5
rmApplied add-cbrt-cube24.5
rmApplied add-cube-cbrt24.5
Final simplification24.5
herbie shell --seed 2019152
(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))))))))))