R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sqrt[3]{{\left(\sqrt[3]{{\left(\sqrt[3]{{\left(\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)\right)}^{3}}\right)}^{3}}\right)}^{3}}\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r77211 = R;
double r77212 = 2.0;
double r77213 = phi1;
double r77214 = phi2;
double r77215 = r77213 - r77214;
double r77216 = r77215 / r77212;
double r77217 = sin(r77216);
double r77218 = pow(r77217, r77212);
double r77219 = cos(r77213);
double r77220 = cos(r77214);
double r77221 = r77219 * r77220;
double r77222 = lambda1;
double r77223 = lambda2;
double r77224 = r77222 - r77223;
double r77225 = r77224 / r77212;
double r77226 = sin(r77225);
double r77227 = r77221 * r77226;
double r77228 = r77227 * r77226;
double r77229 = r77218 + r77228;
double r77230 = sqrt(r77229);
double r77231 = 1.0;
double r77232 = r77231 - r77229;
double r77233 = sqrt(r77232);
double r77234 = atan2(r77230, r77233);
double r77235 = r77212 * r77234;
double r77236 = r77211 * r77235;
return r77236;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r77237 = R;
double r77238 = 2.0;
double r77239 = phi1;
double r77240 = phi2;
double r77241 = r77239 - r77240;
double r77242 = r77241 / r77238;
double r77243 = sin(r77242);
double r77244 = pow(r77243, r77238);
double r77245 = cos(r77239);
double r77246 = cos(r77240);
double r77247 = r77245 * r77246;
double r77248 = lambda1;
double r77249 = lambda2;
double r77250 = r77248 - r77249;
double r77251 = r77250 / r77238;
double r77252 = sin(r77251);
double r77253 = r77247 * r77252;
double r77254 = r77253 * r77252;
double r77255 = r77244 + r77254;
double r77256 = sqrt(r77255);
double r77257 = 1.0;
double r77258 = exp(r77252);
double r77259 = log(r77258);
double r77260 = 3.0;
double r77261 = pow(r77259, r77260);
double r77262 = cbrt(r77261);
double r77263 = pow(r77262, r77260);
double r77264 = cbrt(r77263);
double r77265 = pow(r77264, r77260);
double r77266 = cbrt(r77265);
double r77267 = r77253 * r77266;
double r77268 = r77244 + r77267;
double r77269 = r77257 - r77268;
double r77270 = sqrt(r77269);
double r77271 = atan2(r77256, r77270);
double r77272 = r77238 * r77271;
double r77273 = r77237 * r77272;
return r77273;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.5
rmApplied add-cbrt-cube24.6
Simplified24.6
rmApplied add-cbrt-cube24.6
Simplified24.6
rmApplied add-cbrt-cube24.6
Simplified24.6
rmApplied add-log-exp24.6
Final simplification24.6
herbie shell --seed 2019304
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
:precision binary64
(* R (* 2 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))) (sqrt (- 1 (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))))))))