\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 \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\frac{\mathsf{fma}\left(\cos \phi_1, \cos \phi_1 \cdot \cos \phi_1, \left(\left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right) \cdot \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right)}{\mathsf{fma}\left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right), \cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \sin \lambda_2, \cos \lambda_1 \cdot \cos \lambda_2\right) - \cos \phi_1, \cos \phi_1 \cdot \cos \phi_1\right)}} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1965199 = lambda1;
double r1965200 = phi2;
double r1965201 = cos(r1965200);
double r1965202 = lambda2;
double r1965203 = r1965199 - r1965202;
double r1965204 = sin(r1965203);
double r1965205 = r1965201 * r1965204;
double r1965206 = phi1;
double r1965207 = cos(r1965206);
double r1965208 = cos(r1965203);
double r1965209 = r1965201 * r1965208;
double r1965210 = r1965207 + r1965209;
double r1965211 = atan2(r1965205, r1965210);
double r1965212 = r1965199 + r1965211;
return r1965212;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1965213 = phi2;
double r1965214 = cos(r1965213);
double r1965215 = lambda1;
double r1965216 = sin(r1965215);
double r1965217 = lambda2;
double r1965218 = cos(r1965217);
double r1965219 = r1965216 * r1965218;
double r1965220 = cos(r1965215);
double r1965221 = sin(r1965217);
double r1965222 = r1965220 * r1965221;
double r1965223 = r1965219 - r1965222;
double r1965224 = r1965214 * r1965223;
double r1965225 = phi1;
double r1965226 = cos(r1965225);
double r1965227 = r1965226 * r1965226;
double r1965228 = r1965220 * r1965218;
double r1965229 = fma(r1965216, r1965221, r1965228);
double r1965230 = r1965214 * r1965229;
double r1965231 = r1965230 * r1965230;
double r1965232 = r1965231 * r1965230;
double r1965233 = fma(r1965226, r1965227, r1965232);
double r1965234 = r1965230 - r1965226;
double r1965235 = fma(r1965230, r1965234, r1965227);
double r1965236 = r1965233 / r1965235;
double r1965237 = atan2(r1965224, r1965236);
double r1965238 = r1965237 + r1965215;
return r1965238;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.8
rmApplied sin-diff0.8
rmApplied cos-diff0.2
rmApplied flip3-+0.2
Simplified0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019144 +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)))))))