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)\tan^{-1}_* \frac{\sqrt{\left(\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)} \cdot \cos \phi_2\right) \cdot \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1\right) + \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_2\right) \cdot \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1\right)}} \cdot \left(2 \cdot R\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2588233 = R;
double r2588234 = 2.0;
double r2588235 = phi1;
double r2588236 = phi2;
double r2588237 = r2588235 - r2588236;
double r2588238 = r2588237 / r2588234;
double r2588239 = sin(r2588238);
double r2588240 = pow(r2588239, r2588234);
double r2588241 = cos(r2588235);
double r2588242 = cos(r2588236);
double r2588243 = r2588241 * r2588242;
double r2588244 = lambda1;
double r2588245 = lambda2;
double r2588246 = r2588244 - r2588245;
double r2588247 = r2588246 / r2588234;
double r2588248 = sin(r2588247);
double r2588249 = r2588243 * r2588248;
double r2588250 = r2588249 * r2588248;
double r2588251 = r2588240 + r2588250;
double r2588252 = sqrt(r2588251);
double r2588253 = 1.0;
double r2588254 = r2588253 - r2588251;
double r2588255 = sqrt(r2588254);
double r2588256 = atan2(r2588252, r2588255);
double r2588257 = r2588234 * r2588256;
double r2588258 = r2588233 * r2588257;
return r2588258;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2588259 = lambda1;
double r2588260 = lambda2;
double r2588261 = r2588259 - r2588260;
double r2588262 = 2.0;
double r2588263 = r2588261 / r2588262;
double r2588264 = sin(r2588263);
double r2588265 = r2588264 * r2588264;
double r2588266 = r2588265 * r2588264;
double r2588267 = cbrt(r2588266);
double r2588268 = phi2;
double r2588269 = cos(r2588268);
double r2588270 = r2588267 * r2588269;
double r2588271 = phi1;
double r2588272 = cos(r2588271);
double r2588273 = r2588264 * r2588272;
double r2588274 = r2588270 * r2588273;
double r2588275 = r2588271 - r2588268;
double r2588276 = r2588275 / r2588262;
double r2588277 = sin(r2588276);
double r2588278 = r2588277 * r2588277;
double r2588279 = r2588274 + r2588278;
double r2588280 = sqrt(r2588279);
double r2588281 = cos(r2588276);
double r2588282 = r2588281 * r2588281;
double r2588283 = r2588264 * r2588269;
double r2588284 = r2588283 * r2588273;
double r2588285 = r2588282 - r2588284;
double r2588286 = sqrt(r2588285);
double r2588287 = atan2(r2588280, r2588286);
double r2588288 = R;
double r2588289 = r2588262 * r2588288;
double r2588290 = r2588287 * r2588289;
return r2588290;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.6
Simplified24.6
rmApplied add-cbrt-cube24.7
Final simplification24.7
herbie shell --seed 2019165
(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))))))))))