\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(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right)}^{3}}{\cos \phi_1 \cdot \cos \phi_1 + \left(\cos \lambda_1 \cdot \left(\cos \phi_2 \cdot \cos \lambda_2\right)\right) \cdot \left(\cos \lambda_1 \cdot \left(\cos \phi_2 \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 r41038 = lambda1;
double r41039 = phi2;
double r41040 = cos(r41039);
double r41041 = lambda2;
double r41042 = r41038 - r41041;
double r41043 = sin(r41042);
double r41044 = r41040 * r41043;
double r41045 = phi1;
double r41046 = cos(r41045);
double r41047 = cos(r41042);
double r41048 = r41040 * r41047;
double r41049 = r41046 + r41048;
double r41050 = atan2(r41044, r41049);
double r41051 = r41038 + r41050;
return r41051;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r41052 = lambda1;
double r41053 = phi2;
double r41054 = cos(r41053);
double r41055 = sin(r41052);
double r41056 = lambda2;
double r41057 = cos(r41056);
double r41058 = r41055 * r41057;
double r41059 = cos(r41052);
double r41060 = -r41056;
double r41061 = sin(r41060);
double r41062 = r41059 * r41061;
double r41063 = r41058 + r41062;
double r41064 = r41054 * r41063;
double r41065 = phi1;
double r41066 = cos(r41065);
double r41067 = 3.0;
double r41068 = pow(r41066, r41067);
double r41069 = r41059 * r41057;
double r41070 = r41069 * r41054;
double r41071 = pow(r41070, r41067);
double r41072 = r41068 + r41071;
double r41073 = r41066 * r41066;
double r41074 = r41054 * r41057;
double r41075 = r41059 * r41074;
double r41076 = r41075 - r41066;
double r41077 = r41075 * r41076;
double r41078 = r41073 + r41077;
double r41079 = r41072 / r41078;
double r41080 = sin(r41056);
double r41081 = r41055 * r41080;
double r41082 = r41081 * r41054;
double r41083 = r41079 + r41082;
double r41084 = atan2(r41064, r41083);
double r41085 = r41052 + r41084;
return r41085;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



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