\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}{\sqrt[3]{{\left(\cos delta - \sin \phi_1 \cdot \sin \left(\mathsf{log1p}\left(\mathsf{expm1}\left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right)\right)\right)}^{3}}}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r104077 = lambda1;
double r104078 = theta;
double r104079 = sin(r104078);
double r104080 = delta;
double r104081 = sin(r104080);
double r104082 = r104079 * r104081;
double r104083 = phi1;
double r104084 = cos(r104083);
double r104085 = r104082 * r104084;
double r104086 = cos(r104080);
double r104087 = sin(r104083);
double r104088 = r104087 * r104086;
double r104089 = r104084 * r104081;
double r104090 = cos(r104078);
double r104091 = r104089 * r104090;
double r104092 = r104088 + r104091;
double r104093 = asin(r104092);
double r104094 = sin(r104093);
double r104095 = r104087 * r104094;
double r104096 = r104086 - r104095;
double r104097 = atan2(r104085, r104096);
double r104098 = r104077 + r104097;
return r104098;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r104099 = lambda1;
double r104100 = theta;
double r104101 = sin(r104100);
double r104102 = delta;
double r104103 = sin(r104102);
double r104104 = r104101 * r104103;
double r104105 = phi1;
double r104106 = cos(r104105);
double r104107 = r104104 * r104106;
double r104108 = cos(r104102);
double r104109 = sin(r104105);
double r104110 = r104109 * r104108;
double r104111 = r104106 * r104103;
double r104112 = cos(r104100);
double r104113 = r104111 * r104112;
double r104114 = r104110 + r104113;
double r104115 = asin(r104114);
double r104116 = expm1(r104115);
double r104117 = log1p(r104116);
double r104118 = sin(r104117);
double r104119 = r104109 * r104118;
double r104120 = r104108 - r104119;
double r104121 = 3.0;
double r104122 = pow(r104120, r104121);
double r104123 = cbrt(r104122);
double r104124 = atan2(r104107, r104123);
double r104125 = r104099 + r104124;
return r104125;
}



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-cbrt-cube0.2
Simplified0.2
rmApplied log1p-expm1-u0.2
Final simplification0.2
herbie shell --seed 2020060 +o rules:numerics
(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))))))))))