R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \log \left(e^{\sqrt[3]{{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}^{3}}}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r64072 = R;
double r64073 = 2.0;
double r64074 = phi1;
double r64075 = phi2;
double r64076 = r64074 - r64075;
double r64077 = r64076 / r64073;
double r64078 = sin(r64077);
double r64079 = pow(r64078, r64073);
double r64080 = cos(r64074);
double r64081 = cos(r64075);
double r64082 = r64080 * r64081;
double r64083 = lambda1;
double r64084 = lambda2;
double r64085 = r64083 - r64084;
double r64086 = r64085 / r64073;
double r64087 = sin(r64086);
double r64088 = r64082 * r64087;
double r64089 = r64088 * r64087;
double r64090 = r64079 + r64089;
double r64091 = sqrt(r64090);
double r64092 = 1.0;
double r64093 = r64092 - r64090;
double r64094 = sqrt(r64093);
double r64095 = atan2(r64091, r64094);
double r64096 = r64073 * r64095;
double r64097 = r64072 * r64096;
return r64097;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r64098 = R;
double r64099 = 2.0;
double r64100 = phi1;
double r64101 = r64100 / r64099;
double r64102 = sin(r64101);
double r64103 = phi2;
double r64104 = r64103 / r64099;
double r64105 = cos(r64104);
double r64106 = r64102 * r64105;
double r64107 = cos(r64101);
double r64108 = sin(r64104);
double r64109 = r64107 * r64108;
double r64110 = r64106 - r64109;
double r64111 = pow(r64110, r64099);
double r64112 = cos(r64100);
double r64113 = cos(r64103);
double r64114 = r64112 * r64113;
double r64115 = lambda1;
double r64116 = lambda2;
double r64117 = r64115 - r64116;
double r64118 = r64117 / r64099;
double r64119 = sin(r64118);
double r64120 = r64114 * r64119;
double r64121 = r64120 * r64119;
double r64122 = r64111 + r64121;
double r64123 = sqrt(r64122);
double r64124 = 1.0;
double r64125 = 3.0;
double r64126 = pow(r64119, r64125);
double r64127 = cbrt(r64126);
double r64128 = exp(r64127);
double r64129 = log(r64128);
double r64130 = r64114 * r64129;
double r64131 = r64130 * r64119;
double r64132 = r64111 + r64131;
double r64133 = r64124 - r64132;
double r64134 = sqrt(r64133);
double r64135 = atan2(r64123, r64134);
double r64136 = r64099 * r64135;
double r64137 = r64098 * r64136;
return r64137;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.3
rmApplied div-sub24.3
Applied sin-diff23.7
rmApplied div-sub23.7
Applied sin-diff14.0
rmApplied add-log-exp14.0
rmApplied add-cbrt-cube14.0
Simplified14.0
Final simplification14.0
herbie shell --seed 2019303
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
:precision binary64
(* R (* 2 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))) (sqrt (- 1 (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))))))))