\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{\sin delta \cdot \left(\cos \phi_1 \cdot \sin theta\right)}{\cos delta \cdot \left(\cos \phi_1 \cdot \cos \phi_1\right) - \sin \phi_1 \cdot \left(\cos \phi_1 \cdot \left(\cos theta \cdot \sin delta\right)\right)}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r53858 = lambda1;
double r53859 = theta;
double r53860 = sin(r53859);
double r53861 = delta;
double r53862 = sin(r53861);
double r53863 = r53860 * r53862;
double r53864 = phi1;
double r53865 = cos(r53864);
double r53866 = r53863 * r53865;
double r53867 = cos(r53861);
double r53868 = sin(r53864);
double r53869 = r53868 * r53867;
double r53870 = r53865 * r53862;
double r53871 = cos(r53859);
double r53872 = r53870 * r53871;
double r53873 = r53869 + r53872;
double r53874 = asin(r53873);
double r53875 = sin(r53874);
double r53876 = r53868 * r53875;
double r53877 = r53867 - r53876;
double r53878 = atan2(r53866, r53877);
double r53879 = r53858 + r53878;
return r53879;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r53880 = lambda1;
double r53881 = delta;
double r53882 = sin(r53881);
double r53883 = phi1;
double r53884 = cos(r53883);
double r53885 = theta;
double r53886 = sin(r53885);
double r53887 = r53884 * r53886;
double r53888 = r53882 * r53887;
double r53889 = cos(r53881);
double r53890 = r53884 * r53884;
double r53891 = r53889 * r53890;
double r53892 = sin(r53883);
double r53893 = cos(r53885);
double r53894 = r53893 * r53882;
double r53895 = r53884 * r53894;
double r53896 = r53892 * r53895;
double r53897 = r53891 - r53896;
double r53898 = atan2(r53888, r53897);
double r53899 = r53880 + r53898;
return r53899;
}



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
Taylor expanded around inf 0.2
Simplified0.2
Taylor expanded around 0 0.2
rmApplied associate--r+0.2
rmApplied *-un-lft-identity0.2
Applied distribute-rgt-out--0.2
Simplified0.1
Final simplification0.1
herbie shell --seed 2019212
(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))))))))))