\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 \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \sqrt[3]{{\left(\sin \phi_1 \cdot \cos \phi_2\right)}^{3}} \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r89048 = lambda1;
double r89049 = lambda2;
double r89050 = r89048 - r89049;
double r89051 = sin(r89050);
double r89052 = phi2;
double r89053 = cos(r89052);
double r89054 = r89051 * r89053;
double r89055 = phi1;
double r89056 = cos(r89055);
double r89057 = sin(r89052);
double r89058 = r89056 * r89057;
double r89059 = sin(r89055);
double r89060 = r89059 * r89053;
double r89061 = cos(r89050);
double r89062 = r89060 * r89061;
double r89063 = r89058 - r89062;
double r89064 = atan2(r89054, r89063);
return r89064;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r89065 = lambda1;
double r89066 = sin(r89065);
double r89067 = lambda2;
double r89068 = cos(r89067);
double r89069 = r89066 * r89068;
double r89070 = cos(r89065);
double r89071 = -r89067;
double r89072 = sin(r89071);
double r89073 = r89070 * r89072;
double r89074 = r89069 + r89073;
double r89075 = phi2;
double r89076 = cos(r89075);
double r89077 = r89074 * r89076;
double r89078 = phi1;
double r89079 = cos(r89078);
double r89080 = sin(r89075);
double r89081 = r89079 * r89080;
double r89082 = sin(r89078);
double r89083 = r89082 * r89076;
double r89084 = r89070 * r89068;
double r89085 = r89083 * r89084;
double r89086 = 3.0;
double r89087 = pow(r89083, r89086);
double r89088 = cbrt(r89087);
double r89089 = sin(r89067);
double r89090 = r89066 * r89089;
double r89091 = r89088 * r89090;
double r89092 = r89085 + r89091;
double r89093 = r89081 - r89092;
double r89094 = atan2(r89077, r89093);
return r89094;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.1
rmApplied sub-neg13.1
Applied sin-sum6.8
Simplified6.8
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cbrt-cube0.2
Applied add-cbrt-cube0.2
Applied cbrt-unprod0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020047
(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))))))