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)}R \cdot \mathsf{hypot}\left(\left(\mathsf{log1p}\left(\left(\mathsf{expm1}\left(\left(\cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right)\right)\right)\right)\right) \cdot \left(\lambda_1 - \lambda_2\right)\right), \left(\phi_1 - \phi_2\right)\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1444666 = R;
double r1444667 = lambda1;
double r1444668 = lambda2;
double r1444669 = r1444667 - r1444668;
double r1444670 = phi1;
double r1444671 = phi2;
double r1444672 = r1444670 + r1444671;
double r1444673 = 2.0;
double r1444674 = r1444672 / r1444673;
double r1444675 = cos(r1444674);
double r1444676 = r1444669 * r1444675;
double r1444677 = r1444676 * r1444676;
double r1444678 = r1444670 - r1444671;
double r1444679 = r1444678 * r1444678;
double r1444680 = r1444677 + r1444679;
double r1444681 = sqrt(r1444680);
double r1444682 = r1444666 * r1444681;
return r1444682;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1444683 = R;
double r1444684 = phi2;
double r1444685 = phi1;
double r1444686 = r1444684 + r1444685;
double r1444687 = 0.5;
double r1444688 = r1444686 * r1444687;
double r1444689 = cos(r1444688);
double r1444690 = expm1(r1444689);
double r1444691 = log1p(r1444690);
double r1444692 = lambda1;
double r1444693 = lambda2;
double r1444694 = r1444692 - r1444693;
double r1444695 = r1444691 * r1444694;
double r1444696 = r1444685 - r1444684;
double r1444697 = hypot(r1444695, r1444696);
double r1444698 = r1444683 * r1444697;
return r1444698;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 37.1
Simplified4.1
Taylor expanded around inf 4.1
Simplified4.1
rmApplied log1p-expm1-u4.1
Final simplification4.1
herbie shell --seed 2019128 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))