\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left({\left({\left(\sqrt[3]{\left(\cos \lambda_2 \cdot \sin \phi_1\right) \cdot \left(\cos \phi_2 \cdot \cos \lambda_1\right)}\right)}^{6}\right)}^{\frac{1}{3}} \cdot \sqrt[3]{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r101103 = lambda1;
double r101104 = lambda2;
double r101105 = r101103 - r101104;
double r101106 = sin(r101105);
double r101107 = phi2;
double r101108 = cos(r101107);
double r101109 = r101106 * r101108;
double r101110 = phi1;
double r101111 = cos(r101110);
double r101112 = sin(r101107);
double r101113 = r101111 * r101112;
double r101114 = sin(r101110);
double r101115 = r101114 * r101108;
double r101116 = cos(r101105);
double r101117 = r101115 * r101116;
double r101118 = r101113 - r101117;
double r101119 = atan2(r101109, r101118);
return r101119;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r101120 = lambda1;
double r101121 = sin(r101120);
double r101122 = lambda2;
double r101123 = cos(r101122);
double r101124 = r101121 * r101123;
double r101125 = cos(r101120);
double r101126 = sin(r101122);
double r101127 = r101125 * r101126;
double r101128 = r101124 - r101127;
double r101129 = phi2;
double r101130 = cos(r101129);
double r101131 = r101128 * r101130;
double r101132 = phi1;
double r101133 = cos(r101132);
double r101134 = sin(r101129);
double r101135 = r101133 * r101134;
double r101136 = sin(r101132);
double r101137 = r101123 * r101136;
double r101138 = r101130 * r101125;
double r101139 = r101137 * r101138;
double r101140 = cbrt(r101139);
double r101141 = 6.0;
double r101142 = pow(r101140, r101141);
double r101143 = 0.3333333333333333;
double r101144 = pow(r101142, r101143);
double r101145 = r101125 * r101123;
double r101146 = r101136 * r101130;
double r101147 = r101145 * r101146;
double r101148 = cbrt(r101147);
double r101149 = r101144 * r101148;
double r101150 = r101121 * r101126;
double r101151 = r101150 * r101146;
double r101152 = r101149 + r101151;
double r101153 = r101135 - r101152;
double r101154 = atan2(r101131, r101153);
return r101154;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sin-diff6.6
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
Simplified0.2
rmApplied add-cube-cbrt0.3
rmApplied pow1/332.6
Applied pow1/332.6
Applied pow-prod-down0.3
Simplified0.4
Final simplification0.4
herbie shell --seed 2019303
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
:precision binary64
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))