\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{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right) + \cos \phi_1} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1217123 = lambda1;
double r1217124 = phi2;
double r1217125 = cos(r1217124);
double r1217126 = lambda2;
double r1217127 = r1217123 - r1217126;
double r1217128 = sin(r1217127);
double r1217129 = r1217125 * r1217128;
double r1217130 = phi1;
double r1217131 = cos(r1217130);
double r1217132 = cos(r1217127);
double r1217133 = r1217125 * r1217132;
double r1217134 = r1217131 + r1217133;
double r1217135 = atan2(r1217129, r1217134);
double r1217136 = r1217123 + r1217135;
return r1217136;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1217137 = phi2;
double r1217138 = cos(r1217137);
double r1217139 = lambda1;
double r1217140 = lambda2;
double r1217141 = r1217139 - r1217140;
double r1217142 = sin(r1217141);
double r1217143 = r1217138 * r1217142;
double r1217144 = cos(r1217141);
double r1217145 = r1217138 * r1217144;
double r1217146 = phi1;
double r1217147 = cos(r1217146);
double r1217148 = r1217145 + r1217147;
double r1217149 = atan2(r1217143, r1217148);
double r1217150 = r1217149 + r1217139;
return r1217150;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0
Final simplification0
herbie shell --seed 2019142
(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)))))))