\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 r723386 = lambda1;
double r723387 = phi2;
double r723388 = cos(r723387);
double r723389 = lambda2;
double r723390 = r723386 - r723389;
double r723391 = sin(r723390);
double r723392 = r723388 * r723391;
double r723393 = phi1;
double r723394 = cos(r723393);
double r723395 = cos(r723390);
double r723396 = r723388 * r723395;
double r723397 = r723394 + r723396;
double r723398 = atan2(r723392, r723397);
double r723399 = r723386 + r723398;
return r723399;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r723400 = lambda1;
double r723401 = lambda2;
double r723402 = r723400 - r723401;
double r723403 = sin(r723402);
double r723404 = phi2;
double r723405 = cos(r723404);
double r723406 = r723403 * r723405;
double r723407 = cos(r723402);
double r723408 = phi1;
double r723409 = cos(r723408);
double r723410 = fma(r723405, r723407, r723409);
double r723411 = atan2(r723406, r723410);
double r723412 = r723400 + r723411;
return r723412;
}



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 2019132 +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)))))))