R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\begin{array}{l}
\mathbf{if}\;\phi_2 \le -1.4192043883179198 \cdot 10^{+170}:\\
\;\;\;\;\left(-R\right) \cdot \left(\frac{\left(\cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right) \cdot \cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right)\right) \cdot \lambda_2}{\frac{\phi_1}{\lambda_1}} \cdot \frac{\phi_2}{\phi_1} + \left(\frac{\left(\cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right) \cdot \cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right)\right) \cdot \lambda_2}{\frac{\phi_1}{\lambda_1}} + \phi_2\right)\right)\\
\mathbf{elif}\;\phi_2 \le 1.4887928748670235 \cdot 10^{+79}:\\
\;\;\;\;R \cdot \sqrt{\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \left(\left(\lambda_1 - 2 \cdot \lambda_2\right) \cdot \lambda_1 + \lambda_2 \cdot \lambda_2\right) \cdot \left(\cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right) \cdot \cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r46129105 = R;
double r46129106 = lambda1;
double r46129107 = lambda2;
double r46129108 = r46129106 - r46129107;
double r46129109 = phi1;
double r46129110 = phi2;
double r46129111 = r46129109 + r46129110;
double r46129112 = 2.0;
double r46129113 = r46129111 / r46129112;
double r46129114 = cos(r46129113);
double r46129115 = r46129108 * r46129114;
double r46129116 = r46129115 * r46129115;
double r46129117 = r46129109 - r46129110;
double r46129118 = r46129117 * r46129117;
double r46129119 = r46129116 + r46129118;
double r46129120 = sqrt(r46129119);
double r46129121 = r46129105 * r46129120;
return r46129121;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r46129122 = phi2;
double r46129123 = -1.4192043883179198e+170;
bool r46129124 = r46129122 <= r46129123;
double r46129125 = R;
double r46129126 = -r46129125;
double r46129127 = phi1;
double r46129128 = r46129122 + r46129127;
double r46129129 = 0.5;
double r46129130 = r46129128 * r46129129;
double r46129131 = cos(r46129130);
double r46129132 = r46129131 * r46129131;
double r46129133 = lambda2;
double r46129134 = r46129132 * r46129133;
double r46129135 = lambda1;
double r46129136 = r46129127 / r46129135;
double r46129137 = r46129134 / r46129136;
double r46129138 = r46129122 / r46129127;
double r46129139 = r46129137 * r46129138;
double r46129140 = r46129137 + r46129122;
double r46129141 = r46129139 + r46129140;
double r46129142 = r46129126 * r46129141;
double r46129143 = 1.4887928748670235e+79;
bool r46129144 = r46129122 <= r46129143;
double r46129145 = r46129127 - r46129122;
double r46129146 = r46129145 * r46129145;
double r46129147 = 2.0;
double r46129148 = r46129147 * r46129133;
double r46129149 = r46129135 - r46129148;
double r46129150 = r46129149 * r46129135;
double r46129151 = r46129133 * r46129133;
double r46129152 = r46129150 + r46129151;
double r46129153 = r46129152 * r46129132;
double r46129154 = r46129146 + r46129153;
double r46129155 = sqrt(r46129154);
double r46129156 = r46129125 * r46129155;
double r46129157 = r46129122 - r46129127;
double r46129158 = r46129125 * r46129157;
double r46129159 = r46129144 ? r46129156 : r46129158;
double r46129160 = r46129124 ? r46129142 : r46129159;
return r46129160;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi2 < -1.4192043883179198e+170Initial program 60.7
Taylor expanded around inf 60.8
Simplified60.7
rmApplied add-cube-cbrt60.7
Taylor expanded around inf 46.1
Simplified42.0
if -1.4192043883179198e+170 < phi2 < 1.4887928748670235e+79Initial program 31.4
Taylor expanded around inf 31.5
Simplified31.5
if 1.4887928748670235e+79 < phi2 Initial program 50.5
Taylor expanded around 0 21.9
Final simplification31.0
herbie shell --seed 2019104
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))