\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{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\frac{\mathsf{fma}\left(\cos \phi_1, \cos \phi_1 \cdot \cos \phi_1, \left(\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right)\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right)\right)}{\mathsf{fma}\left(\cos \phi_1 - \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2, \cos \phi_1, \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right)\right)}} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1817066 = lambda1;
double r1817067 = phi2;
double r1817068 = cos(r1817067);
double r1817069 = lambda2;
double r1817070 = r1817066 - r1817069;
double r1817071 = sin(r1817070);
double r1817072 = r1817068 * r1817071;
double r1817073 = phi1;
double r1817074 = cos(r1817073);
double r1817075 = cos(r1817070);
double r1817076 = r1817068 * r1817075;
double r1817077 = r1817074 + r1817076;
double r1817078 = atan2(r1817072, r1817077);
double r1817079 = r1817066 + r1817078;
return r1817079;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1817080 = lambda1;
double r1817081 = sin(r1817080);
double r1817082 = lambda2;
double r1817083 = cos(r1817082);
double r1817084 = r1817081 * r1817083;
double r1817085 = cos(r1817080);
double r1817086 = sin(r1817082);
double r1817087 = r1817085 * r1817086;
double r1817088 = r1817084 - r1817087;
double r1817089 = phi2;
double r1817090 = cos(r1817089);
double r1817091 = r1817088 * r1817090;
double r1817092 = phi1;
double r1817093 = cos(r1817092);
double r1817094 = r1817093 * r1817093;
double r1817095 = r1817086 * r1817081;
double r1817096 = fma(r1817085, r1817083, r1817095);
double r1817097 = r1817096 * r1817090;
double r1817098 = r1817097 * r1817097;
double r1817099 = r1817098 * r1817097;
double r1817100 = fma(r1817093, r1817094, r1817099);
double r1817101 = r1817093 - r1817097;
double r1817102 = fma(r1817101, r1817093, r1817098);
double r1817103 = r1817100 / r1817102;
double r1817104 = atan2(r1817091, r1817103);
double r1817105 = r1817104 + r1817080;
return r1817105;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.9
Simplified0.9
rmApplied sin-diff0.9
rmApplied cos-diff0.2
rmApplied fma-udef0.2
Simplified0.2
rmApplied flip3-+0.3
Simplified0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019163 +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)))))))