\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 \left(-\lambda_2\right)\right)}{\frac{{\left(\cos \phi_1\right)}^{3} + {\left(\cos \phi_2\right)}^{3} \cdot {\left(\cos \lambda_1 \cdot \cos \lambda_2\right)}^{3}}{\cos \phi_1 \cdot \cos \phi_1 + \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) - \cos \phi_1\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 r40061 = lambda1;
double r40062 = phi2;
double r40063 = cos(r40062);
double r40064 = lambda2;
double r40065 = r40061 - r40064;
double r40066 = sin(r40065);
double r40067 = r40063 * r40066;
double r40068 = phi1;
double r40069 = cos(r40068);
double r40070 = cos(r40065);
double r40071 = r40063 * r40070;
double r40072 = r40069 + r40071;
double r40073 = atan2(r40067, r40072);
double r40074 = r40061 + r40073;
return r40074;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r40075 = lambda1;
double r40076 = phi2;
double r40077 = cos(r40076);
double r40078 = sin(r40075);
double r40079 = lambda2;
double r40080 = cos(r40079);
double r40081 = r40078 * r40080;
double r40082 = cos(r40075);
double r40083 = -r40079;
double r40084 = sin(r40083);
double r40085 = r40082 * r40084;
double r40086 = r40081 + r40085;
double r40087 = r40077 * r40086;
double r40088 = phi1;
double r40089 = cos(r40088);
double r40090 = 3.0;
double r40091 = pow(r40089, r40090);
double r40092 = pow(r40077, r40090);
double r40093 = r40082 * r40080;
double r40094 = pow(r40093, r40090);
double r40095 = r40092 * r40094;
double r40096 = r40091 + r40095;
double r40097 = r40089 * r40089;
double r40098 = r40077 * r40093;
double r40099 = r40098 - r40089;
double r40100 = r40098 * r40099;
double r40101 = r40097 + r40100;
double r40102 = r40096 / r40101;
double r40103 = sin(r40079);
double r40104 = r40078 * r40103;
double r40105 = r40104 * r40077;
double r40106 = r40102 + r40105;
double r40107 = atan2(r40087, r40106);
double r40108 = r40075 + r40107;
return r40108;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.8
rmApplied cos-diff0.8
Applied distribute-rgt-in0.8
Applied associate-+r+0.8
Simplified0.8
rmApplied sub-neg0.8
Applied sin-sum0.2
Simplified0.2
rmApplied flip3-+0.3
Simplified0.3
rmApplied unpow-prod-down0.3
Final simplification0.3
herbie shell --seed 2019323
(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)))))))