\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}{\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right), \cos \phi_2, \cos \phi_1\right) \cdot \left(\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right), \cos \phi_2, \cos \phi_1\right) \cdot \mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right), \cos \phi_2, \cos \phi_1\right)\right)}} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1642094 = lambda1;
double r1642095 = phi2;
double r1642096 = cos(r1642095);
double r1642097 = lambda2;
double r1642098 = r1642094 - r1642097;
double r1642099 = sin(r1642098);
double r1642100 = r1642096 * r1642099;
double r1642101 = phi1;
double r1642102 = cos(r1642101);
double r1642103 = cos(r1642098);
double r1642104 = r1642096 * r1642103;
double r1642105 = r1642102 + r1642104;
double r1642106 = atan2(r1642100, r1642105);
double r1642107 = r1642094 + r1642106;
return r1642107;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1642108 = lambda1;
double r1642109 = sin(r1642108);
double r1642110 = lambda2;
double r1642111 = cos(r1642110);
double r1642112 = r1642109 * r1642111;
double r1642113 = cos(r1642108);
double r1642114 = sin(r1642110);
double r1642115 = r1642113 * r1642114;
double r1642116 = r1642112 - r1642115;
double r1642117 = phi2;
double r1642118 = cos(r1642117);
double r1642119 = r1642116 * r1642118;
double r1642120 = r1642114 * r1642109;
double r1642121 = fma(r1642113, r1642111, r1642120);
double r1642122 = phi1;
double r1642123 = cos(r1642122);
double r1642124 = fma(r1642121, r1642118, r1642123);
double r1642125 = r1642124 * r1642124;
double r1642126 = r1642124 * r1642125;
double r1642127 = cbrt(r1642126);
double r1642128 = atan2(r1642119, r1642127);
double r1642129 = r1642128 + r1642108;
return r1642129;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.9
Simplified0.8
rmApplied sin-diff0.8
rmApplied cos-diff0.2
rmApplied add-log-exp0.3
Simplified0.3
rmApplied add-cbrt-cube0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019151 +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)))))))