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{\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({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \frac{\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) - \cos \left(\frac{\lambda_1 - \lambda_2}{2} + \frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt[3]{2}}\right)\right)}} \cdot 2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3514579 = R;
double r3514580 = 2.0;
double r3514581 = phi1;
double r3514582 = phi2;
double r3514583 = r3514581 - r3514582;
double r3514584 = r3514583 / r3514580;
double r3514585 = sin(r3514584);
double r3514586 = pow(r3514585, r3514580);
double r3514587 = cos(r3514581);
double r3514588 = cos(r3514582);
double r3514589 = r3514587 * r3514588;
double r3514590 = lambda1;
double r3514591 = lambda2;
double r3514592 = r3514590 - r3514591;
double r3514593 = r3514592 / r3514580;
double r3514594 = sin(r3514593);
double r3514595 = r3514589 * r3514594;
double r3514596 = r3514595 * r3514594;
double r3514597 = r3514586 + r3514596;
double r3514598 = sqrt(r3514597);
double r3514599 = 1.0;
double r3514600 = r3514599 - r3514597;
double r3514601 = sqrt(r3514600);
double r3514602 = atan2(r3514598, r3514601);
double r3514603 = r3514580 * r3514602;
double r3514604 = r3514579 * r3514603;
return r3514604;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3514605 = lambda1;
double r3514606 = lambda2;
double r3514607 = r3514605 - r3514606;
double r3514608 = 2.0;
double r3514609 = r3514607 / r3514608;
double r3514610 = sin(r3514609);
double r3514611 = phi2;
double r3514612 = cos(r3514611);
double r3514613 = phi1;
double r3514614 = cos(r3514613);
double r3514615 = r3514612 * r3514614;
double r3514616 = r3514615 * r3514610;
double r3514617 = r3514610 * r3514616;
double r3514618 = r3514613 - r3514611;
double r3514619 = r3514618 / r3514608;
double r3514620 = sin(r3514619);
double r3514621 = pow(r3514620, r3514608);
double r3514622 = r3514617 + r3514621;
double r3514623 = sqrt(r3514622);
double r3514624 = 1.0;
double r3514625 = r3514609 + r3514609;
double r3514626 = cos(r3514625);
double r3514627 = r3514626 * r3514610;
double r3514628 = r3514610 - r3514627;
double r3514629 = cbrt(r3514628);
double r3514630 = 2.0;
double r3514631 = cbrt(r3514630);
double r3514632 = r3514629 / r3514631;
double r3514633 = r3514615 * r3514632;
double r3514634 = r3514610 * r3514633;
double r3514635 = r3514621 + r3514634;
double r3514636 = r3514624 - r3514635;
double r3514637 = sqrt(r3514636);
double r3514638 = atan2(r3514623, r3514637);
double r3514639 = r3514638 * r3514608;
double r3514640 = R;
double r3514641 = r3514639 * r3514640;
return r3514641;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.8
rmApplied add-cbrt-cube24.8
rmApplied sin-mult24.8
Applied associate-*l/24.8
Applied cbrt-div24.8
Simplified24.8
Final simplification24.8
herbie shell --seed 2019171
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
(* R (* 2.0 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))) (sqrt (- 1.0 (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))))))))