\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(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \left(\log \left(e^{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)}\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4624123 = lambda1;
double r4624124 = lambda2;
double r4624125 = r4624123 - r4624124;
double r4624126 = sin(r4624125);
double r4624127 = phi2;
double r4624128 = cos(r4624127);
double r4624129 = r4624126 * r4624128;
double r4624130 = phi1;
double r4624131 = cos(r4624130);
double r4624132 = sin(r4624127);
double r4624133 = r4624131 * r4624132;
double r4624134 = sin(r4624130);
double r4624135 = r4624134 * r4624128;
double r4624136 = cos(r4624125);
double r4624137 = r4624135 * r4624136;
double r4624138 = r4624133 - r4624137;
double r4624139 = atan2(r4624129, r4624138);
return r4624139;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4624140 = lambda2;
double r4624141 = cos(r4624140);
double r4624142 = lambda1;
double r4624143 = sin(r4624142);
double r4624144 = r4624141 * r4624143;
double r4624145 = cos(r4624142);
double r4624146 = sin(r4624140);
double r4624147 = r4624145 * r4624146;
double r4624148 = r4624144 - r4624147;
double r4624149 = phi2;
double r4624150 = cos(r4624149);
double r4624151 = r4624148 * r4624150;
double r4624152 = sin(r4624149);
double r4624153 = phi1;
double r4624154 = cos(r4624153);
double r4624155 = r4624152 * r4624154;
double r4624156 = r4624146 * r4624143;
double r4624157 = sin(r4624153);
double r4624158 = r4624150 * r4624157;
double r4624159 = r4624156 * r4624158;
double r4624160 = exp(r4624159);
double r4624161 = log(r4624160);
double r4624162 = r4624141 * r4624145;
double r4624163 = r4624162 * r4624158;
double r4624164 = r4624161 + r4624163;
double r4624165 = r4624155 - r4624164;
double r4624166 = atan2(r4624151, r4624165);
return r4624166;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.1
rmApplied sin-diff6.9
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
rmApplied add-log-exp0.2
Final simplification0.2
herbie shell --seed 2019162 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))