\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \log \left(e^{\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}\right)}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r114951 = lambda1;
double r114952 = theta;
double r114953 = sin(r114952);
double r114954 = delta;
double r114955 = sin(r114954);
double r114956 = r114953 * r114955;
double r114957 = phi1;
double r114958 = cos(r114957);
double r114959 = r114956 * r114958;
double r114960 = cos(r114954);
double r114961 = sin(r114957);
double r114962 = r114961 * r114960;
double r114963 = r114958 * r114955;
double r114964 = cos(r114952);
double r114965 = r114963 * r114964;
double r114966 = r114962 + r114965;
double r114967 = asin(r114966);
double r114968 = sin(r114967);
double r114969 = r114961 * r114968;
double r114970 = r114960 - r114969;
double r114971 = atan2(r114959, r114970);
double r114972 = r114951 + r114971;
return r114972;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r114973 = lambda1;
double r114974 = theta;
double r114975 = sin(r114974);
double r114976 = delta;
double r114977 = sin(r114976);
double r114978 = r114975 * r114977;
double r114979 = phi1;
double r114980 = cos(r114979);
double r114981 = r114978 * r114980;
double r114982 = cos(r114976);
double r114983 = sin(r114979);
double r114984 = r114983 * r114982;
double r114985 = r114980 * r114977;
double r114986 = cos(r114974);
double r114987 = r114985 * r114986;
double r114988 = r114984 + r114987;
double r114989 = asin(r114988);
double r114990 = sin(r114989);
double r114991 = r114983 * r114990;
double r114992 = exp(r114991);
double r114993 = log(r114992);
double r114994 = r114982 - r114993;
double r114995 = atan2(r114981, r114994);
double r114996 = r114973 + r114995;
return r114996;
}



Bits error versus lambda1



Bits error versus phi1



Bits error versus phi2



Bits error versus delta



Bits error versus theta
Results
Initial program 0.2
rmApplied add-log-exp0.2
Final simplification0.2
herbie shell --seed 2020042
(FPCore (lambda1 phi1 phi2 delta theta)
:name "Destination given bearing on a great circle"
:precision binary64
(+ lambda1 (atan2 (* (* (sin theta) (sin delta)) (cos phi1)) (- (cos delta) (* (sin phi1) (sin (asin (+ (* (sin phi1) (cos delta)) (* (* (cos phi1) (sin delta)) (cos theta))))))))))