\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{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\sqrt[3]{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \cos \phi_1\right) \cdot \left(\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \cos \phi_1\right) \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \cos \phi_1\right)\right)}} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2146770 = lambda1;
double r2146771 = phi2;
double r2146772 = cos(r2146771);
double r2146773 = lambda2;
double r2146774 = r2146770 - r2146773;
double r2146775 = sin(r2146774);
double r2146776 = r2146772 * r2146775;
double r2146777 = phi1;
double r2146778 = cos(r2146777);
double r2146779 = cos(r2146774);
double r2146780 = r2146772 * r2146779;
double r2146781 = r2146778 + r2146780;
double r2146782 = atan2(r2146776, r2146781);
double r2146783 = r2146770 + r2146782;
return r2146783;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2146784 = phi2;
double r2146785 = cos(r2146784);
double r2146786 = lambda1;
double r2146787 = sin(r2146786);
double r2146788 = lambda2;
double r2146789 = cos(r2146788);
double r2146790 = r2146787 * r2146789;
double r2146791 = cos(r2146786);
double r2146792 = sin(r2146788);
double r2146793 = r2146791 * r2146792;
double r2146794 = r2146790 - r2146793;
double r2146795 = r2146785 * r2146794;
double r2146796 = r2146791 * r2146789;
double r2146797 = r2146792 * r2146787;
double r2146798 = r2146796 + r2146797;
double r2146799 = r2146785 * r2146798;
double r2146800 = phi1;
double r2146801 = cos(r2146800);
double r2146802 = r2146799 + r2146801;
double r2146803 = r2146802 * r2146802;
double r2146804 = r2146802 * r2146803;
double r2146805 = cbrt(r2146804);
double r2146806 = atan2(r2146795, r2146805);
double r2146807 = r2146806 + r2146786;
return r2146807;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



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