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)\left(R \cdot \tan^{-1}_* \frac{\sqrt{\sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right) + \left(\left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sqrt[3]{\left(\sqrt[3]{\cos \left(\frac{\phi_1 - \phi_2}{2}\right)} \cdot \left(\sqrt[3]{\cos \left(\frac{\phi_1 - \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 - \phi_2}{2}\right)}\right)\right) \cdot \left(\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right)\right)} - \left(\left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \cos \phi_1\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\right) \cdot 2double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2004094 = R;
double r2004095 = 2.0;
double r2004096 = phi1;
double r2004097 = phi2;
double r2004098 = r2004096 - r2004097;
double r2004099 = r2004098 / r2004095;
double r2004100 = sin(r2004099);
double r2004101 = pow(r2004100, r2004095);
double r2004102 = cos(r2004096);
double r2004103 = cos(r2004097);
double r2004104 = r2004102 * r2004103;
double r2004105 = lambda1;
double r2004106 = lambda2;
double r2004107 = r2004105 - r2004106;
double r2004108 = r2004107 / r2004095;
double r2004109 = sin(r2004108);
double r2004110 = r2004104 * r2004109;
double r2004111 = r2004110 * r2004109;
double r2004112 = r2004101 + r2004111;
double r2004113 = sqrt(r2004112);
double r2004114 = 1.0;
double r2004115 = r2004114 - r2004112;
double r2004116 = sqrt(r2004115);
double r2004117 = atan2(r2004113, r2004116);
double r2004118 = r2004095 * r2004117;
double r2004119 = r2004094 * r2004118;
return r2004119;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2004120 = R;
double r2004121 = phi1;
double r2004122 = phi2;
double r2004123 = r2004121 - r2004122;
double r2004124 = 2.0;
double r2004125 = r2004123 / r2004124;
double r2004126 = sin(r2004125);
double r2004127 = r2004126 * r2004126;
double r2004128 = cos(r2004122);
double r2004129 = lambda1;
double r2004130 = lambda2;
double r2004131 = r2004129 - r2004130;
double r2004132 = r2004131 / r2004124;
double r2004133 = sin(r2004132);
double r2004134 = r2004128 * r2004133;
double r2004135 = cos(r2004121);
double r2004136 = r2004134 * r2004135;
double r2004137 = r2004136 * r2004133;
double r2004138 = r2004127 + r2004137;
double r2004139 = sqrt(r2004138);
double r2004140 = cos(r2004125);
double r2004141 = cbrt(r2004140);
double r2004142 = r2004141 * r2004141;
double r2004143 = r2004141 * r2004142;
double r2004144 = r2004140 * r2004140;
double r2004145 = r2004143 * r2004144;
double r2004146 = cbrt(r2004145);
double r2004147 = r2004140 * r2004146;
double r2004148 = r2004147 - r2004137;
double r2004149 = sqrt(r2004148);
double r2004150 = atan2(r2004139, r2004149);
double r2004151 = r2004120 * r2004150;
double r2004152 = r2004151 * r2004124;
return r2004152;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.5
Simplified24.5
rmApplied add-cbrt-cube24.5
rmApplied add-cube-cbrt24.5
Final simplification24.5
herbie shell --seed 2019152
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Distance on a great circle"
(* 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))))))))))