\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}}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 - \cos \phi_1\right) + \cos \phi_1 \cdot \cos \phi_1} + \cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r56112 = lambda1;
double r56113 = phi2;
double r56114 = cos(r56113);
double r56115 = lambda2;
double r56116 = r56112 - r56115;
double r56117 = sin(r56116);
double r56118 = r56114 * r56117;
double r56119 = phi1;
double r56120 = cos(r56119);
double r56121 = cos(r56116);
double r56122 = r56114 * r56121;
double r56123 = r56120 + r56122;
double r56124 = atan2(r56118, r56123);
double r56125 = r56112 + r56124;
return r56125;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r56126 = lambda1;
double r56127 = phi2;
double r56128 = cos(r56127);
double r56129 = sin(r56126);
double r56130 = lambda2;
double r56131 = cos(r56130);
double r56132 = r56129 * r56131;
double r56133 = cos(r56126);
double r56134 = -r56130;
double r56135 = sin(r56134);
double r56136 = r56133 * r56135;
double r56137 = r56132 + r56136;
double r56138 = r56128 * r56137;
double r56139 = phi1;
double r56140 = cos(r56139);
double r56141 = 3.0;
double r56142 = pow(r56140, r56141);
double r56143 = r56133 * r56131;
double r56144 = r56143 * r56128;
double r56145 = pow(r56144, r56141);
double r56146 = r56142 + r56145;
double r56147 = r56144 - r56140;
double r56148 = r56144 * r56147;
double r56149 = r56140 * r56140;
double r56150 = r56148 + r56149;
double r56151 = r56146 / r56150;
double r56152 = sin(r56130);
double r56153 = r56129 * r56152;
double r56154 = r56128 * r56153;
double r56155 = r56151 + r56154;
double r56156 = atan2(r56138, r56155);
double r56157 = r56126 + r56156;
return r56157;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 1.0
rmApplied cos-diff1.0
Applied distribute-lft-in1.0
Applied associate-+r+1.0
Simplified1.0
rmApplied sub-neg1.0
Applied sin-sum0.2
Simplified0.2
rmApplied flip3-+0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020056
(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)))))))