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(\left(\lambda_1 - \lambda_2\right) \cdot \mathsf{expm1}\left(\left(\mathsf{log1p}\left(\left(\cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right)\right)\right)\right)\right)\right), \left(\phi_1 - \phi_2\right)\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r4083340 = R;
double r4083341 = lambda1;
double r4083342 = lambda2;
double r4083343 = r4083341 - r4083342;
double r4083344 = phi1;
double r4083345 = phi2;
double r4083346 = r4083344 + r4083345;
double r4083347 = 2.0;
double r4083348 = r4083346 / r4083347;
double r4083349 = cos(r4083348);
double r4083350 = r4083343 * r4083349;
double r4083351 = r4083350 * r4083350;
double r4083352 = r4083344 - r4083345;
double r4083353 = r4083352 * r4083352;
double r4083354 = r4083351 + r4083353;
double r4083355 = sqrt(r4083354);
double r4083356 = r4083340 * r4083355;
return r4083356;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r4083357 = R;
double r4083358 = lambda1;
double r4083359 = lambda2;
double r4083360 = r4083358 - r4083359;
double r4083361 = phi1;
double r4083362 = phi2;
double r4083363 = r4083361 + r4083362;
double r4083364 = 0.5;
double r4083365 = r4083363 * r4083364;
double r4083366 = cos(r4083365);
double r4083367 = log1p(r4083366);
double r4083368 = expm1(r4083367);
double r4083369 = r4083360 * r4083368;
double r4083370 = r4083361 - r4083362;
double r4083371 = hypot(r4083369, r4083370);
double r4083372 = r4083357 * r4083371;
return r4083372;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 37.5
Simplified3.9
rmApplied expm1-log1p-u3.9
Taylor expanded around -inf 4.0
Simplified3.9
Final simplification3.9
herbie shell --seed 2019120 +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))))))