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{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right) + \left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \left(\cos \phi_1 \cdot \sqrt[3]{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \left(\cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2510234 = R;
double r2510235 = 2.0;
double r2510236 = phi1;
double r2510237 = phi2;
double r2510238 = r2510236 - r2510237;
double r2510239 = r2510238 / r2510235;
double r2510240 = sin(r2510239);
double r2510241 = pow(r2510240, r2510235);
double r2510242 = cos(r2510236);
double r2510243 = cos(r2510237);
double r2510244 = r2510242 * r2510243;
double r2510245 = lambda1;
double r2510246 = lambda2;
double r2510247 = r2510245 - r2510246;
double r2510248 = r2510247 / r2510235;
double r2510249 = sin(r2510248);
double r2510250 = r2510244 * r2510249;
double r2510251 = r2510250 * r2510249;
double r2510252 = r2510241 + r2510251;
double r2510253 = sqrt(r2510252);
double r2510254 = 1.0;
double r2510255 = r2510254 - r2510252;
double r2510256 = sqrt(r2510255);
double r2510257 = atan2(r2510253, r2510256);
double r2510258 = r2510235 * r2510257;
double r2510259 = r2510234 * r2510258;
return r2510259;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2510260 = R;
double r2510261 = 2.0;
double r2510262 = phi1;
double r2510263 = phi2;
double r2510264 = r2510262 - r2510263;
double r2510265 = r2510264 / r2510261;
double r2510266 = sin(r2510265);
double r2510267 = r2510266 * r2510266;
double r2510268 = cos(r2510263);
double r2510269 = lambda1;
double r2510270 = lambda2;
double r2510271 = r2510269 - r2510270;
double r2510272 = r2510271 / r2510261;
double r2510273 = sin(r2510272);
double r2510274 = r2510268 * r2510273;
double r2510275 = cos(r2510262);
double r2510276 = r2510273 * r2510273;
double r2510277 = r2510276 * r2510273;
double r2510278 = cbrt(r2510277);
double r2510279 = r2510275 * r2510278;
double r2510280 = r2510274 * r2510279;
double r2510281 = r2510267 + r2510280;
double r2510282 = sqrt(r2510281);
double r2510283 = cos(r2510265);
double r2510284 = r2510283 * r2510283;
double r2510285 = r2510275 * r2510273;
double r2510286 = r2510274 * r2510285;
double r2510287 = r2510284 - r2510286;
double r2510288 = sqrt(r2510287);
double r2510289 = atan2(r2510282, r2510288);
double r2510290 = r2510261 * r2510289;
double r2510291 = r2510260 * r2510290;
return r2510291;
}



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
Simplified24.1
rmApplied add-cbrt-cube24.3
Final simplification24.3
herbie shell --seed 2019143
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
(* 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))))))))))