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 r2766636 = R;
double r2766637 = 2.0;
double r2766638 = phi1;
double r2766639 = phi2;
double r2766640 = r2766638 - r2766639;
double r2766641 = r2766640 / r2766637;
double r2766642 = sin(r2766641);
double r2766643 = pow(r2766642, r2766637);
double r2766644 = cos(r2766638);
double r2766645 = cos(r2766639);
double r2766646 = r2766644 * r2766645;
double r2766647 = lambda1;
double r2766648 = lambda2;
double r2766649 = r2766647 - r2766648;
double r2766650 = r2766649 / r2766637;
double r2766651 = sin(r2766650);
double r2766652 = r2766646 * r2766651;
double r2766653 = r2766652 * r2766651;
double r2766654 = r2766643 + r2766653;
double r2766655 = sqrt(r2766654);
double r2766656 = 1.0;
double r2766657 = r2766656 - r2766654;
double r2766658 = sqrt(r2766657);
double r2766659 = atan2(r2766655, r2766658);
double r2766660 = r2766637 * r2766659;
double r2766661 = r2766636 * r2766660;
return r2766661;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2766662 = R;
double r2766663 = 2.0;
double r2766664 = lambda1;
double r2766665 = lambda2;
double r2766666 = r2766664 - r2766665;
double r2766667 = r2766666 / r2766663;
double r2766668 = sin(r2766667);
double r2766669 = phi2;
double r2766670 = cos(r2766669);
double r2766671 = phi1;
double r2766672 = cos(r2766671);
double r2766673 = r2766670 * r2766672;
double r2766674 = r2766673 * r2766668;
double r2766675 = r2766668 * r2766674;
double r2766676 = r2766671 - r2766669;
double r2766677 = r2766676 / r2766663;
double r2766678 = sin(r2766677);
double r2766679 = pow(r2766678, r2766663);
double r2766680 = r2766675 + r2766679;
double r2766681 = sqrt(r2766680);
double r2766682 = 1.0;
double r2766683 = r2766682 - r2766680;
double r2766684 = sqrt(r2766683);
double r2766685 = atan2(r2766681, r2766684);
double r2766686 = r2766663 * r2766685;
double r2766687 = r2766662 * r2766686;
return r2766687;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.1
Final simplification24.1
herbie shell --seed 2019151 +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))))))))))