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)2 \cdot \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 \left(\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)} \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \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)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1061173 = R;
double r1061174 = 2.0;
double r1061175 = phi1;
double r1061176 = phi2;
double r1061177 = r1061175 - r1061176;
double r1061178 = r1061177 / r1061174;
double r1061179 = sin(r1061178);
double r1061180 = pow(r1061179, r1061174);
double r1061181 = cos(r1061175);
double r1061182 = cos(r1061176);
double r1061183 = r1061181 * r1061182;
double r1061184 = lambda1;
double r1061185 = lambda2;
double r1061186 = r1061184 - r1061185;
double r1061187 = r1061186 / r1061174;
double r1061188 = sin(r1061187);
double r1061189 = r1061183 * r1061188;
double r1061190 = r1061189 * r1061188;
double r1061191 = r1061180 + r1061190;
double r1061192 = sqrt(r1061191);
double r1061193 = 1.0;
double r1061194 = r1061193 - r1061191;
double r1061195 = sqrt(r1061194);
double r1061196 = atan2(r1061192, r1061195);
double r1061197 = r1061174 * r1061196;
double r1061198 = r1061173 * r1061197;
return r1061198;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1061199 = 2.0;
double r1061200 = R;
double r1061201 = phi1;
double r1061202 = phi2;
double r1061203 = r1061201 - r1061202;
double r1061204 = r1061203 / r1061199;
double r1061205 = sin(r1061204);
double r1061206 = r1061205 * r1061205;
double r1061207 = cos(r1061202);
double r1061208 = lambda1;
double r1061209 = lambda2;
double r1061210 = r1061208 - r1061209;
double r1061211 = r1061210 / r1061199;
double r1061212 = sin(r1061211);
double r1061213 = r1061207 * r1061212;
double r1061214 = cos(r1061201);
double r1061215 = r1061213 * r1061214;
double r1061216 = cbrt(r1061212);
double r1061217 = r1061212 * r1061212;
double r1061218 = cbrt(r1061217);
double r1061219 = r1061216 * r1061218;
double r1061220 = r1061215 * r1061219;
double r1061221 = r1061206 + r1061220;
double r1061222 = sqrt(r1061221);
double r1061223 = cos(r1061204);
double r1061224 = r1061223 * r1061223;
double r1061225 = r1061215 * r1061212;
double r1061226 = r1061224 - r1061225;
double r1061227 = sqrt(r1061226);
double r1061228 = atan2(r1061222, r1061227);
double r1061229 = r1061200 * r1061228;
double r1061230 = r1061199 * r1061229;
return r1061230;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.0
Simplified24.0
rmApplied add-cbrt-cube24.2
rmApplied cbrt-prod24.0
Final simplification24.0
herbie shell --seed 2019153
(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))))))))))