\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)}\tan^{-1}_* \frac{\left(\left(-\cos \lambda_1 \cdot \sin \lambda_2\right) + \sin \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2}{\log \left(e^{\cos \phi_1 + \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2}\right)} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r50154 = lambda1;
double r50155 = phi2;
double r50156 = cos(r50155);
double r50157 = lambda2;
double r50158 = r50154 - r50157;
double r50159 = sin(r50158);
double r50160 = r50156 * r50159;
double r50161 = phi1;
double r50162 = cos(r50161);
double r50163 = cos(r50158);
double r50164 = r50156 * r50163;
double r50165 = r50162 + r50164;
double r50166 = atan2(r50160, r50165);
double r50167 = r50154 + r50166;
return r50167;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r50168 = lambda1;
double r50169 = cos(r50168);
double r50170 = lambda2;
double r50171 = sin(r50170);
double r50172 = r50169 * r50171;
double r50173 = -r50172;
double r50174 = sin(r50168);
double r50175 = cos(r50170);
double r50176 = r50174 * r50175;
double r50177 = r50173 + r50176;
double r50178 = phi2;
double r50179 = cos(r50178);
double r50180 = r50177 * r50179;
double r50181 = phi1;
double r50182 = cos(r50181);
double r50183 = r50169 * r50175;
double r50184 = r50171 * r50174;
double r50185 = r50183 + r50184;
double r50186 = r50185 * r50179;
double r50187 = r50182 + r50186;
double r50188 = exp(r50187);
double r50189 = log(r50188);
double r50190 = atan2(r50180, r50189);
double r50191 = r50190 + r50168;
return r50191;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
Simplified0.9
rmApplied cos-diff0.9
Simplified0.9
rmApplied sub-neg0.9
Applied sin-sum0.2
Simplified0.2
Simplified0.2
rmApplied add-log-exp0.2
Applied add-log-exp0.3
Applied sum-log0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019194
(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)))))))