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 \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r80509 = R;
double r80510 = lambda1;
double r80511 = lambda2;
double r80512 = r80510 - r80511;
double r80513 = phi1;
double r80514 = phi2;
double r80515 = r80513 + r80514;
double r80516 = 2.0;
double r80517 = r80515 / r80516;
double r80518 = cos(r80517);
double r80519 = r80512 * r80518;
double r80520 = r80519 * r80519;
double r80521 = r80513 - r80514;
double r80522 = r80521 * r80521;
double r80523 = r80520 + r80522;
double r80524 = sqrt(r80523);
double r80525 = r80509 * r80524;
return r80525;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r80526 = lambda1;
double r80527 = lambda2;
double r80528 = r80526 - r80527;
double r80529 = phi1;
double r80530 = phi2;
double r80531 = r80529 + r80530;
double r80532 = 2.0;
double r80533 = r80531 / r80532;
double r80534 = cos(r80533);
double r80535 = r80528 * r80534;
double r80536 = r80529 - r80530;
double r80537 = hypot(r80535, r80536);
double r80538 = R;
double r80539 = r80537 * r80538;
return r80539;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 39.2
Simplified3.6
rmApplied pow13.6
Applied pow13.6
Applied pow-prod-down3.6
Final simplification3.6
herbie shell --seed 2020060 +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))))))