\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)}{\log \left(e^{\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \cos \phi_1}\right) + \left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r3651930 = lambda1;
double r3651931 = phi2;
double r3651932 = cos(r3651931);
double r3651933 = lambda2;
double r3651934 = r3651930 - r3651933;
double r3651935 = sin(r3651934);
double r3651936 = r3651932 * r3651935;
double r3651937 = phi1;
double r3651938 = cos(r3651937);
double r3651939 = cos(r3651934);
double r3651940 = r3651932 * r3651939;
double r3651941 = r3651938 + r3651940;
double r3651942 = atan2(r3651936, r3651941);
double r3651943 = r3651930 + r3651942;
return r3651943;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r3651944 = phi2;
double r3651945 = cos(r3651944);
double r3651946 = lambda1;
double r3651947 = sin(r3651946);
double r3651948 = lambda2;
double r3651949 = cos(r3651948);
double r3651950 = r3651947 * r3651949;
double r3651951 = cos(r3651946);
double r3651952 = sin(r3651948);
double r3651953 = r3651951 * r3651952;
double r3651954 = r3651950 - r3651953;
double r3651955 = r3651945 * r3651954;
double r3651956 = r3651951 * r3651949;
double r3651957 = r3651945 * r3651956;
double r3651958 = phi1;
double r3651959 = cos(r3651958);
double r3651960 = r3651957 + r3651959;
double r3651961 = exp(r3651960);
double r3651962 = log(r3651961);
double r3651963 = r3651952 * r3651947;
double r3651964 = r3651963 * r3651945;
double r3651965 = r3651962 + r3651964;
double r3651966 = atan2(r3651955, r3651965);
double r3651967 = r3651966 + r3651946;
return r3651967;
}



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
Applied distribute-lft-in0.2
Applied associate-+r+0.2
rmApplied add-log-exp0.3
Applied add-log-exp0.3
Applied sum-log0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019168
(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)))))))