\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 \cdot \left(\cos \phi_1 \cdot \cos \phi_1\right) - \left(\sin \phi_1 \cdot \left(\sin delta \cdot \cos \phi_1\right)\right) \cdot \cos theta}(FPCore (lambda1 phi1 phi2 delta theta)
: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))))))))))(FPCore (lambda1 phi1 phi2 delta theta)
:precision binary64
(+
lambda1
(atan2
(* (* (sin theta) (sin delta)) (cos phi1))
(-
(* (cos delta) (* (cos phi1) (cos phi1)))
(* (* (sin phi1) (* (sin delta) (cos phi1))) (cos theta))))))double code(double lambda1, double phi1, double phi2, double delta, double theta) {
return ((double) (lambda1 + ((double) atan2(((double) (((double) (((double) sin(theta)) * ((double) sin(delta)))) * ((double) cos(phi1)))), ((double) (((double) cos(delta)) - ((double) (((double) sin(phi1)) * ((double) sin(((double) asin(((double) (((double) (((double) sin(phi1)) * ((double) cos(delta)))) + ((double) (((double) (((double) cos(phi1)) * ((double) sin(delta)))) * ((double) cos(theta))))))))))))))))));
}
double code(double lambda1, double phi1, double phi2, double delta, double theta) {
return ((double) (lambda1 + ((double) atan2(((double) (((double) (((double) sin(theta)) * ((double) sin(delta)))) * ((double) cos(phi1)))), ((double) (((double) (((double) cos(delta)) * ((double) (((double) cos(phi1)) * ((double) cos(phi1)))))) - ((double) (((double) (((double) sin(phi1)) * ((double) (((double) sin(delta)) * ((double) cos(phi1)))))) * ((double) cos(theta))))))))));
}



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
rmApplied distribute-lft-in_binary640.2
Applied associate--r+_binary640.2
Simplified0.1
rmApplied associate-*r*_binary640.1
Final simplification0.1
herbie shell --seed 2020205
(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))))))))))