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(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right)\right), \left(\phi_1 - \phi_2\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2880575 = R;
double r2880576 = lambda1;
double r2880577 = lambda2;
double r2880578 = r2880576 - r2880577;
double r2880579 = phi1;
double r2880580 = phi2;
double r2880581 = r2880579 + r2880580;
double r2880582 = 2.0;
double r2880583 = r2880581 / r2880582;
double r2880584 = cos(r2880583);
double r2880585 = r2880578 * r2880584;
double r2880586 = r2880585 * r2880585;
double r2880587 = r2880579 - r2880580;
double r2880588 = r2880587 * r2880587;
double r2880589 = r2880586 + r2880588;
double r2880590 = sqrt(r2880589);
double r2880591 = r2880575 * r2880590;
return r2880591;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2880592 = lambda1;
double r2880593 = lambda2;
double r2880594 = r2880592 - r2880593;
double r2880595 = phi1;
double r2880596 = phi2;
double r2880597 = r2880595 + r2880596;
double r2880598 = 0.5;
double r2880599 = r2880597 * r2880598;
double r2880600 = cos(r2880599);
double r2880601 = r2880594 * r2880600;
double r2880602 = r2880595 - r2880596;
double r2880603 = hypot(r2880601, r2880602);
double r2880604 = R;
double r2880605 = r2880603 * r2880604;
return r2880605;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 37.4
Simplified3.6
Taylor expanded around -inf 3.6
Simplified3.6
Final simplification3.6
herbie shell --seed 2019129 +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))))))