R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \sqrt[3]{{\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}}, \phi_1 - \phi_2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r69666 = R;
double r69667 = lambda1;
double r69668 = lambda2;
double r69669 = r69667 - r69668;
double r69670 = phi1;
double r69671 = phi2;
double r69672 = r69670 + r69671;
double r69673 = 2.0;
double r69674 = r69672 / r69673;
double r69675 = cos(r69674);
double r69676 = r69669 * r69675;
double r69677 = r69676 * r69676;
double r69678 = r69670 - r69671;
double r69679 = r69678 * r69678;
double r69680 = r69677 + r69679;
double r69681 = sqrt(r69680);
double r69682 = r69666 * r69681;
return r69682;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r69683 = lambda1;
double r69684 = lambda2;
double r69685 = r69683 - r69684;
double r69686 = phi1;
double r69687 = phi2;
double r69688 = r69686 + r69687;
double r69689 = 2.0;
double r69690 = r69688 / r69689;
double r69691 = cos(r69690);
double r69692 = 3.0;
double r69693 = pow(r69691, r69692);
double r69694 = cbrt(r69693);
double r69695 = r69685 * r69694;
double r69696 = r69686 - r69687;
double r69697 = hypot(r69695, r69696);
double r69698 = R;
double r69699 = r69697 * r69698;
return r69699;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 39.1
Simplified3.7
rmApplied add-cbrt-cube3.8
Simplified3.8
Final simplification3.8
herbie shell --seed 2020064 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
:precision binary64
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))