\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)}\tan^{-1}_* \frac{\cos \phi_1 \cdot \left(\sin delta \cdot \sin theta\right)}{\mathsf{expm1}\left(\log \left(\cos delta - \mathsf{fma}\left(\sin \phi_1, \mathsf{fma}\left(\sin delta, \cos theta \cdot \cos \phi_1, \cos delta \cdot \sin \phi_1\right), -1\right)\right)\right)} + \lambda_1double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r3547795 = lambda1;
double r3547796 = theta;
double r3547797 = sin(r3547796);
double r3547798 = delta;
double r3547799 = sin(r3547798);
double r3547800 = r3547797 * r3547799;
double r3547801 = phi1;
double r3547802 = cos(r3547801);
double r3547803 = r3547800 * r3547802;
double r3547804 = cos(r3547798);
double r3547805 = sin(r3547801);
double r3547806 = r3547805 * r3547804;
double r3547807 = r3547802 * r3547799;
double r3547808 = cos(r3547796);
double r3547809 = r3547807 * r3547808;
double r3547810 = r3547806 + r3547809;
double r3547811 = asin(r3547810);
double r3547812 = sin(r3547811);
double r3547813 = r3547805 * r3547812;
double r3547814 = r3547804 - r3547813;
double r3547815 = atan2(r3547803, r3547814);
double r3547816 = r3547795 + r3547815;
return r3547816;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r3547817 = phi1;
double r3547818 = cos(r3547817);
double r3547819 = delta;
double r3547820 = sin(r3547819);
double r3547821 = theta;
double r3547822 = sin(r3547821);
double r3547823 = r3547820 * r3547822;
double r3547824 = r3547818 * r3547823;
double r3547825 = cos(r3547819);
double r3547826 = sin(r3547817);
double r3547827 = cos(r3547821);
double r3547828 = r3547827 * r3547818;
double r3547829 = r3547825 * r3547826;
double r3547830 = fma(r3547820, r3547828, r3547829);
double r3547831 = -1.0;
double r3547832 = fma(r3547826, r3547830, r3547831);
double r3547833 = r3547825 - r3547832;
double r3547834 = log(r3547833);
double r3547835 = expm1(r3547834);
double r3547836 = atan2(r3547824, r3547835);
double r3547837 = lambda1;
double r3547838 = r3547836 + r3547837;
return r3547838;
}



Bits error versus lambda1



Bits error versus phi1



Bits error versus phi2



Bits error versus delta



Bits error versus theta
Initial program 0.1
Taylor expanded around inf 0.1
Simplified0.1
rmApplied expm1-log1p-u0.2
rmApplied log1p-udef0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019162 +o rules:numerics
(FPCore (lambda1 phi1 phi2 delta theta)
:name "Destination given bearing on a great circle"
(+ lambda1 (atan2 (* (* (sin theta) (sin delta)) (cos phi1)) (- (cos delta) (* (sin phi1) (sin (asin (+ (* (sin phi1) (cos delta)) (* (* (cos phi1) (sin delta)) (cos theta))))))))))