R \cdot \left(2.0 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2.0}\right)\right)}^{2.0} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2.0}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2.0}\right)}}{\sqrt{1.0 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2.0}\right)\right)}^{2.0} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2.0}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2.0}\right)\right)}}\right)R \cdot \left(2.0 \cdot \tan^{-1}_* \frac{\sqrt{\sin \left(\frac{\lambda_1 - \lambda_2}{2.0}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2.0}\right)\right) + {\left(\sin \left(\frac{\phi_1 - \phi_2}{2.0}\right)\right)}^{2.0}}}{\sqrt{1.0 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2.0}\right)\right)}^{2.0} + \sin \left(\frac{\lambda_1 - \lambda_2}{2.0}\right) \cdot \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \sqrt[3]{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2.0}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2.0}\right)\right) \cdot \left(\left(\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2.0}\right)} \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2.0}\right)}\right) \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2.0}\right)}\right)}\right)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r4554998 = R;
double r4554999 = 2.0;
double r4555000 = phi1;
double r4555001 = phi2;
double r4555002 = r4555000 - r4555001;
double r4555003 = r4555002 / r4554999;
double r4555004 = sin(r4555003);
double r4555005 = pow(r4555004, r4554999);
double r4555006 = cos(r4555000);
double r4555007 = cos(r4555001);
double r4555008 = r4555006 * r4555007;
double r4555009 = lambda1;
double r4555010 = lambda2;
double r4555011 = r4555009 - r4555010;
double r4555012 = r4555011 / r4554999;
double r4555013 = sin(r4555012);
double r4555014 = r4555008 * r4555013;
double r4555015 = r4555014 * r4555013;
double r4555016 = r4555005 + r4555015;
double r4555017 = sqrt(r4555016);
double r4555018 = 1.0;
double r4555019 = r4555018 - r4555016;
double r4555020 = sqrt(r4555019);
double r4555021 = atan2(r4555017, r4555020);
double r4555022 = r4554999 * r4555021;
double r4555023 = r4554998 * r4555022;
return r4555023;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r4555024 = R;
double r4555025 = 2.0;
double r4555026 = lambda1;
double r4555027 = lambda2;
double r4555028 = r4555026 - r4555027;
double r4555029 = r4555028 / r4555025;
double r4555030 = sin(r4555029);
double r4555031 = phi2;
double r4555032 = cos(r4555031);
double r4555033 = phi1;
double r4555034 = cos(r4555033);
double r4555035 = r4555032 * r4555034;
double r4555036 = r4555035 * r4555030;
double r4555037 = r4555030 * r4555036;
double r4555038 = r4555033 - r4555031;
double r4555039 = r4555038 / r4555025;
double r4555040 = sin(r4555039);
double r4555041 = pow(r4555040, r4555025);
double r4555042 = r4555037 + r4555041;
double r4555043 = sqrt(r4555042);
double r4555044 = 1.0;
double r4555045 = r4555030 * r4555030;
double r4555046 = cbrt(r4555030);
double r4555047 = r4555046 * r4555046;
double r4555048 = r4555047 * r4555046;
double r4555049 = r4555045 * r4555048;
double r4555050 = cbrt(r4555049);
double r4555051 = r4555035 * r4555050;
double r4555052 = r4555030 * r4555051;
double r4555053 = r4555041 + r4555052;
double r4555054 = r4555044 - r4555053;
double r4555055 = sqrt(r4555054);
double r4555056 = atan2(r4555043, r4555055);
double r4555057 = r4555025 * r4555056;
double r4555058 = r4555024 * r4555057;
return r4555058;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.7
rmApplied add-cbrt-cube24.7
rmApplied add-cube-cbrt24.7
Final simplification24.7
herbie shell --seed 2019165
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
(* R (* 2.0 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))) (sqrt (- 1.0 (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))))))))