\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\lambda_1 + \tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\mathsf{fma}\left(\left(\cos \phi_2\right), \left(\cos \left(\lambda_1 - \lambda_2\right)\right), \left(\cos \phi_1\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r341286 = lambda1;
double r341287 = phi2;
double r341288 = cos(r341287);
double r341289 = lambda2;
double r341290 = r341286 - r341289;
double r341291 = sin(r341290);
double r341292 = r341288 * r341291;
double r341293 = phi1;
double r341294 = cos(r341293);
double r341295 = cos(r341290);
double r341296 = r341288 * r341295;
double r341297 = r341294 + r341296;
double r341298 = atan2(r341292, r341297);
double r341299 = r341286 + r341298;
return r341299;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r341300 = lambda1;
double r341301 = lambda2;
double r341302 = r341300 - r341301;
double r341303 = sin(r341302);
double r341304 = phi2;
double r341305 = cos(r341304);
double r341306 = r341303 * r341305;
double r341307 = cos(r341302);
double r341308 = phi1;
double r341309 = cos(r341308);
double r341310 = fma(r341305, r341307, r341309);
double r341311 = atan2(r341306, r341310);
double r341312 = r341300 + r341311;
return r341312;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0
Simplified0
Final simplification0
herbie shell --seed 2019128 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))