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)2 \cdot \left(R \cdot \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_2\right) \cdot \left(\cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_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(\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \cos \phi_1\right) \cdot \left(\left(\left(\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)} \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \cos \phi_2\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3510329 = R;
double r3510330 = 2.0;
double r3510331 = phi1;
double r3510332 = phi2;
double r3510333 = r3510331 - r3510332;
double r3510334 = r3510333 / r3510330;
double r3510335 = sin(r3510334);
double r3510336 = pow(r3510335, r3510330);
double r3510337 = cos(r3510331);
double r3510338 = cos(r3510332);
double r3510339 = r3510337 * r3510338;
double r3510340 = lambda1;
double r3510341 = lambda2;
double r3510342 = r3510340 - r3510341;
double r3510343 = r3510342 / r3510330;
double r3510344 = sin(r3510343);
double r3510345 = r3510339 * r3510344;
double r3510346 = r3510345 * r3510344;
double r3510347 = r3510336 + r3510346;
double r3510348 = sqrt(r3510347);
double r3510349 = 1.0;
double r3510350 = r3510349 - r3510347;
double r3510351 = sqrt(r3510350);
double r3510352 = atan2(r3510348, r3510351);
double r3510353 = r3510330 * r3510352;
double r3510354 = r3510329 * r3510353;
return r3510354;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3510355 = 2.0;
double r3510356 = R;
double r3510357 = phi1;
double r3510358 = phi2;
double r3510359 = r3510357 - r3510358;
double r3510360 = r3510359 / r3510355;
double r3510361 = sin(r3510360);
double r3510362 = r3510361 * r3510361;
double r3510363 = lambda1;
double r3510364 = lambda2;
double r3510365 = r3510363 - r3510364;
double r3510366 = r3510365 / r3510355;
double r3510367 = sin(r3510366);
double r3510368 = cos(r3510358);
double r3510369 = r3510367 * r3510368;
double r3510370 = cos(r3510357);
double r3510371 = r3510370 * r3510367;
double r3510372 = r3510369 * r3510371;
double r3510373 = r3510362 + r3510372;
double r3510374 = sqrt(r3510373);
double r3510375 = cos(r3510360);
double r3510376 = r3510375 * r3510375;
double r3510377 = exp(r3510367);
double r3510378 = log(r3510377);
double r3510379 = r3510378 * r3510370;
double r3510380 = cbrt(r3510367);
double r3510381 = r3510380 * r3510380;
double r3510382 = r3510381 * r3510380;
double r3510383 = r3510382 * r3510368;
double r3510384 = r3510379 * r3510383;
double r3510385 = r3510376 - r3510384;
double r3510386 = sqrt(r3510385);
double r3510387 = atan2(r3510374, r3510386);
double r3510388 = r3510356 * r3510387;
double r3510389 = r3510355 * r3510388;
return r3510389;
}



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
Simplified24.1
rmApplied add-cube-cbrt24.2
rmApplied add-log-exp24.2
Final simplification24.2
herbie shell --seed 2019162
(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))))))))))