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 \left(\left(\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)} \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)\right) \cdot \left(\sqrt[3]{{\left(\sqrt[3]{\sin \left(\frac{\lambda_1}{2}\right) \cdot \cos \left(\frac{\lambda_2}{2}\right) - \cos \left(\frac{\lambda_1}{2}\right) \cdot \sin \left(\frac{\lambda_2}{2}\right)}\right)}^{6}} \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r62222 = R;
double r62223 = 2.0;
double r62224 = phi1;
double r62225 = phi2;
double r62226 = r62224 - r62225;
double r62227 = r62226 / r62223;
double r62228 = sin(r62227);
double r62229 = pow(r62228, r62223);
double r62230 = cos(r62224);
double r62231 = cos(r62225);
double r62232 = r62230 * r62231;
double r62233 = lambda1;
double r62234 = lambda2;
double r62235 = r62233 - r62234;
double r62236 = r62235 / r62223;
double r62237 = sin(r62236);
double r62238 = r62232 * r62237;
double r62239 = r62238 * r62237;
double r62240 = r62229 + r62239;
double r62241 = sqrt(r62240);
double r62242 = 1.0;
double r62243 = r62242 - r62240;
double r62244 = sqrt(r62243);
double r62245 = atan2(r62241, r62244);
double r62246 = r62223 * r62245;
double r62247 = r62222 * r62246;
return r62247;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r62248 = R;
double r62249 = 2.0;
double r62250 = phi1;
double r62251 = phi2;
double r62252 = r62250 - r62251;
double r62253 = r62252 / r62249;
double r62254 = sin(r62253);
double r62255 = pow(r62254, r62249);
double r62256 = cos(r62250);
double r62257 = cos(r62251);
double r62258 = r62256 * r62257;
double r62259 = lambda1;
double r62260 = lambda2;
double r62261 = r62259 - r62260;
double r62262 = r62261 / r62249;
double r62263 = sin(r62262);
double r62264 = r62258 * r62263;
double r62265 = r62264 * r62263;
double r62266 = r62255 + r62265;
double r62267 = sqrt(r62266);
double r62268 = 1.0;
double r62269 = cbrt(r62263);
double r62270 = r62269 * r62269;
double r62271 = r62270 * r62269;
double r62272 = r62258 * r62271;
double r62273 = r62259 / r62249;
double r62274 = sin(r62273);
double r62275 = r62260 / r62249;
double r62276 = cos(r62275);
double r62277 = r62274 * r62276;
double r62278 = cos(r62273);
double r62279 = sin(r62275);
double r62280 = r62278 * r62279;
double r62281 = r62277 - r62280;
double r62282 = cbrt(r62281);
double r62283 = 6.0;
double r62284 = pow(r62282, r62283);
double r62285 = cbrt(r62284);
double r62286 = r62285 * r62269;
double r62287 = r62272 * r62286;
double r62288 = r62255 + r62287;
double r62289 = r62268 - r62288;
double r62290 = sqrt(r62289);
double r62291 = atan2(r62267, r62290);
double r62292 = r62249 * r62291;
double r62293 = r62248 * r62292;
return r62293;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.2
rmApplied add-cbrt-cube24.2
Simplified24.2
rmApplied add-cube-cbrt24.3
Applied unpow-prod-down24.3
Applied cbrt-prod24.3
Simplified24.3
Simplified24.3
rmApplied div-sub24.3
Applied sin-diff24.2
rmApplied add-cube-cbrt24.3
Final simplification24.3
herbie shell --seed 2019235
(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))))))))))