\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{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\log \left(e^{\cos \phi_1 + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2}\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r51087 = lambda1;
double r51088 = phi2;
double r51089 = cos(r51088);
double r51090 = lambda2;
double r51091 = r51087 - r51090;
double r51092 = sin(r51091);
double r51093 = r51089 * r51092;
double r51094 = phi1;
double r51095 = cos(r51094);
double r51096 = cos(r51091);
double r51097 = r51089 * r51096;
double r51098 = r51095 + r51097;
double r51099 = atan2(r51093, r51098);
double r51100 = r51087 + r51099;
return r51100;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r51101 = lambda1;
double r51102 = phi2;
double r51103 = cos(r51102);
double r51104 = sin(r51101);
double r51105 = lambda2;
double r51106 = cos(r51105);
double r51107 = r51104 * r51106;
double r51108 = cos(r51101);
double r51109 = sin(r51105);
double r51110 = r51108 * r51109;
double r51111 = r51107 - r51110;
double r51112 = r51103 * r51111;
double r51113 = phi1;
double r51114 = cos(r51113);
double r51115 = r51108 * r51106;
double r51116 = r51115 * r51103;
double r51117 = r51114 + r51116;
double r51118 = exp(r51117);
double r51119 = log(r51118);
double r51120 = r51104 * r51109;
double r51121 = r51120 * r51103;
double r51122 = r51119 + r51121;
double r51123 = atan2(r51112, r51122);
double r51124 = r51101 + r51123;
return r51124;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied sin-diff0.9
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
Applied associate-+r+0.2
rmApplied add-log-exp0.3
Applied add-log-exp0.3
Applied sum-log0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020059
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
:precision binary64
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))