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 - \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 \log \left(e^{\sqrt[3]{{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}^{3}}}\right)\right) \cdot \left(\sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)} \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)\right)}}\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r49084 = R;
double r49085 = 2.0;
double r49086 = phi1;
double r49087 = phi2;
double r49088 = r49086 - r49087;
double r49089 = r49088 / r49085;
double r49090 = sin(r49089);
double r49091 = pow(r49090, r49085);
double r49092 = cos(r49086);
double r49093 = cos(r49087);
double r49094 = r49092 * r49093;
double r49095 = lambda1;
double r49096 = lambda2;
double r49097 = r49095 - r49096;
double r49098 = r49097 / r49085;
double r49099 = sin(r49098);
double r49100 = r49094 * r49099;
double r49101 = r49100 * r49099;
double r49102 = r49091 + r49101;
double r49103 = sqrt(r49102);
double r49104 = 1.0;
double r49105 = r49104 - r49102;
double r49106 = sqrt(r49105);
double r49107 = atan2(r49103, r49106);
double r49108 = r49085 * r49107;
double r49109 = r49084 * r49108;
return r49109;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r49110 = R;
double r49111 = 2.0;
double r49112 = phi1;
double r49113 = phi2;
double r49114 = r49112 - r49113;
double r49115 = r49114 / r49111;
double r49116 = sin(r49115);
double r49117 = pow(r49116, r49111);
double r49118 = cos(r49112);
double r49119 = cos(r49113);
double r49120 = r49118 * r49119;
double r49121 = lambda1;
double r49122 = lambda2;
double r49123 = r49121 - r49122;
double r49124 = r49123 / r49111;
double r49125 = sin(r49124);
double r49126 = r49120 * r49125;
double r49127 = r49126 * r49125;
double r49128 = r49117 + r49127;
double r49129 = sqrt(r49128);
double r49130 = 1.0;
double r49131 = 3.0;
double r49132 = pow(r49125, r49131);
double r49133 = cbrt(r49132);
double r49134 = exp(r49133);
double r49135 = log(r49134);
double r49136 = r49120 * r49135;
double r49137 = r49125 * r49125;
double r49138 = cbrt(r49137);
double r49139 = cbrt(r49125);
double r49140 = r49138 * r49139;
double r49141 = r49136 * r49140;
double r49142 = r49117 + r49141;
double r49143 = r49130 - r49142;
double r49144 = sqrt(r49143);
double r49145 = atan2(r49129, r49144);
double r49146 = r49111 * r49145;
double r49147 = r49110 * r49146;
return r49147;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 24.2
rmApplied add-log-exp24.2
rmApplied add-cbrt-cube24.3
Simplified24.3
rmApplied add-cube-cbrt24.3
Simplified24.3
Final simplification24.3
herbie shell --seed 2019298
(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))))))))))