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{{\left(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\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}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\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 \left(\log \left(\sqrt{e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\right) + \log \left(\sqrt{e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\right)\right)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r6838625 = R;
double r6838626 = 2.0;
double r6838627 = phi1;
double r6838628 = phi2;
double r6838629 = r6838627 - r6838628;
double r6838630 = r6838629 / r6838626;
double r6838631 = sin(r6838630);
double r6838632 = pow(r6838631, r6838626);
double r6838633 = cos(r6838627);
double r6838634 = cos(r6838628);
double r6838635 = r6838633 * r6838634;
double r6838636 = lambda1;
double r6838637 = lambda2;
double r6838638 = r6838636 - r6838637;
double r6838639 = r6838638 / r6838626;
double r6838640 = sin(r6838639);
double r6838641 = r6838635 * r6838640;
double r6838642 = r6838641 * r6838640;
double r6838643 = r6838632 + r6838642;
double r6838644 = sqrt(r6838643);
double r6838645 = 1.0;
double r6838646 = r6838645 - r6838643;
double r6838647 = sqrt(r6838646);
double r6838648 = atan2(r6838644, r6838647);
double r6838649 = r6838626 * r6838648;
double r6838650 = r6838625 * r6838649;
return r6838650;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r6838651 = R;
double r6838652 = 2.0;
double r6838653 = phi1;
double r6838654 = r6838653 / r6838652;
double r6838655 = sin(r6838654);
double r6838656 = phi2;
double r6838657 = r6838656 / r6838652;
double r6838658 = cos(r6838657);
double r6838659 = r6838655 * r6838658;
double r6838660 = cos(r6838654);
double r6838661 = sin(r6838657);
double r6838662 = r6838660 * r6838661;
double r6838663 = r6838659 - r6838662;
double r6838664 = pow(r6838663, r6838652);
double r6838665 = cos(r6838653);
double r6838666 = cos(r6838656);
double r6838667 = r6838665 * r6838666;
double r6838668 = lambda1;
double r6838669 = lambda2;
double r6838670 = r6838668 - r6838669;
double r6838671 = r6838670 / r6838652;
double r6838672 = sin(r6838671);
double r6838673 = r6838667 * r6838672;
double r6838674 = r6838673 * r6838672;
double r6838675 = r6838664 + r6838674;
double r6838676 = sqrt(r6838675);
double r6838677 = 1.0;
double r6838678 = exp(r6838672);
double r6838679 = sqrt(r6838678);
double r6838680 = log(r6838679);
double r6838681 = r6838680 + r6838680;
double r6838682 = r6838673 * r6838681;
double r6838683 = r6838664 + r6838682;
double r6838684 = r6838677 - r6838683;
double r6838685 = sqrt(r6838684);
double r6838686 = atan2(r6838676, r6838685);
double r6838687 = r6838652 * r6838686;
double r6838688 = r6838651 * r6838687;
return r6838688;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.9
rmApplied div-sub24.9
Applied sin-diff24.3
rmApplied div-sub24.3
Applied sin-diff14.4
rmApplied add-log-exp14.4
rmApplied add-sqr-sqrt14.4
Applied log-prod14.4
Final simplification14.4
herbie shell --seed 2019174
(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))))))))))