double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
return ((double) (R * ((double) sqrt(((double) (((double) (((double) (((double) (lambda1 - lambda2)) * ((double) cos(((double) (((double) (phi1 + phi2)) / 2.0)))))) * ((double) (((double) (lambda1 - lambda2)) * ((double) cos(((double) (((double) (phi1 + phi2)) / 2.0)))))))) + ((double) (((double) (phi1 - phi2)) * ((double) (phi1 - phi2))))))))));
}
double code(double R, double lambda1, double lambda2, double phi1, double phi2) {
double VAR;
if ((phi1 <= -6.762865944055262e+93)) {
VAR = ((double) (R * ((double) (phi2 - phi1))));
} else {
double VAR_1;
if ((phi1 <= 4.5117636662343897e-225)) {
VAR_1 = ((double) (R * ((double) sqrt(((double) (((double) (((double) (lambda1 - lambda2)) * ((double) (((double) (lambda1 - lambda2)) * ((double) (((double) cos(((double) (((double) (phi1 + phi2)) / 2.0)))) * ((double) log(((double) exp(((double) cos(((double) (((double) (phi1 + phi2)) / 2.0)))))))))))))) + ((double) (((double) (phi1 - phi2)) * ((double) (phi1 - phi2))))))))));
} else {
double VAR_2;
if (((phi1 <= 2.9967616150076527e-177) || !(phi1 <= 2.3905762670983812e+143))) {
VAR_2 = ((double) (R * ((double) (phi2 - phi1))));
} else {
VAR_2 = ((double) (R * ((double) sqrt(((double) (((double) (((double) (phi1 - phi2)) * ((double) (phi1 - phi2)))) + ((double) (((double) (lambda1 - lambda2)) * ((double) (((double) (lambda1 - lambda2)) * ((double) (((double) cos(((double) (((double) (phi1 + phi2)) / 2.0)))) * ((double) cos(((double) (((double) (phi1 + phi2)) / 2.0))))))))))))))));
}
VAR_1 = VAR_2;
}
VAR = VAR_1;
}
return VAR;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi1 < -6.76286594405526209e93 or 4.51176366623438968e-225 < phi1 < 2.99676161500765266e-177 or 2.39057626709838125e143 < phi1 Initial program 55.0
Simplified55.0
Taylor expanded around 0 39.4
if -6.76286594405526209e93 < phi1 < 4.51176366623438968e-225Initial program 32.4
Simplified32.4
rmApplied add-log-exp32.4
if 2.99676161500765266e-177 < phi1 < 2.39057626709838125e143Initial program 32.4
Simplified32.4
Final simplification34.6
herbie shell --seed 2020191
(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.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))))