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}\;\lambda_2 \le -2.6219847008147082 \cdot 10^{208}:\\
\;\;\;\;R \cdot \left(-\left(\frac{\phi_2 \cdot \left(\lambda_2 \cdot \phi_1\right)}{\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right) \cdot {\lambda_1}^{2}} + \left(\frac{\phi_2 \cdot \phi_1}{\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right) \cdot \lambda_1} + \lambda_2 \cdot \cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)\right)\right)\\
\mathbf{elif}\;\lambda_2 \le -5.5068609279832755 \cdot 10^{47}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\mathbf{elif}\;\lambda_2 \le -343.899314599184834:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\
\mathbf{elif}\;\lambda_2 \le -1.39901496078204538 \cdot 10^{-33}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\mathbf{elif}\;\lambda_2 \le 1.1505150553105537 \cdot 10^{-291}:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \frac{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\left(\lambda_1 \cdot \lambda_1 - \lambda_2 \cdot \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}{\lambda_1 + \lambda_2} + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\
\mathbf{elif}\;\lambda_2 \le 3.62734158549870918 \cdot 10^{-162}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\mathbf{elif}\;\lambda_2 \le 2.0523002437040101 \cdot 10^{31}:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\lambda_1 - \lambda_2\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\
\mathbf{elif}\;\lambda_2 \le 1.8914867016819411 \cdot 10^{68}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\mathbf{elif}\;\lambda_2 \le 2.83361654007986611 \cdot 10^{153}:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\
\mathbf{else}:\\
\;\;\;\;R \cdot \left(\frac{\phi_2 \cdot \left(\lambda_2 \cdot \phi_1\right)}{\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right) \cdot {\lambda_1}^{2}} + \left(\frac{\phi_2 \cdot \phi_1}{\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right) \cdot \lambda_1} + \lambda_2 \cdot \cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)\right)\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r394063 = R;
double r394064 = lambda1;
double r394065 = lambda2;
double r394066 = r394064 - r394065;
double r394067 = phi1;
double r394068 = phi2;
double r394069 = r394067 + r394068;
double r394070 = 2.0;
double r394071 = r394069 / r394070;
double r394072 = cos(r394071);
double r394073 = r394066 * r394072;
double r394074 = r394073 * r394073;
double r394075 = r394067 - r394068;
double r394076 = r394075 * r394075;
double r394077 = r394074 + r394076;
double r394078 = sqrt(r394077);
double r394079 = r394063 * r394078;
return r394079;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r394080 = lambda2;
double r394081 = -2.621984700814708e+208;
bool r394082 = r394080 <= r394081;
double r394083 = R;
double r394084 = phi2;
double r394085 = phi1;
double r394086 = r394080 * r394085;
double r394087 = r394084 * r394086;
double r394088 = 0.5;
double r394089 = r394084 + r394085;
double r394090 = r394088 * r394089;
double r394091 = cos(r394090);
double r394092 = lambda1;
double r394093 = 2.0;
double r394094 = pow(r394092, r394093);
double r394095 = r394091 * r394094;
double r394096 = r394087 / r394095;
double r394097 = r394084 * r394085;
double r394098 = r394091 * r394092;
double r394099 = r394097 / r394098;
double r394100 = r394080 * r394091;
double r394101 = r394099 + r394100;
double r394102 = r394096 + r394101;
double r394103 = -r394102;
double r394104 = r394083 * r394103;
double r394105 = -5.5068609279832755e+47;
bool r394106 = r394080 <= r394105;
double r394107 = r394084 - r394085;
double r394108 = r394083 * r394107;
double r394109 = -343.89931459918483;
bool r394110 = r394080 <= r394109;
double r394111 = r394092 - r394080;
double r394112 = r394085 + r394084;
double r394113 = 2.0;
double r394114 = r394112 / r394113;
double r394115 = cos(r394114);
double r394116 = r394111 * r394115;
double r394117 = r394115 * r394116;
double r394118 = r394111 * r394117;
double r394119 = r394085 - r394084;
double r394120 = r394119 * r394119;
double r394121 = r394118 + r394120;
double r394122 = sqrt(r394121);
double r394123 = r394083 * r394122;
double r394124 = -1.3990149607820454e-33;
bool r394125 = r394080 <= r394124;
double r394126 = 1.1505150553105537e-291;
bool r394127 = r394080 <= r394126;
double r394128 = r394092 * r394092;
double r394129 = r394080 * r394080;
double r394130 = r394128 - r394129;
double r394131 = r394130 * r394115;
double r394132 = r394115 * r394131;
double r394133 = r394092 + r394080;
double r394134 = r394132 / r394133;
double r394135 = r394111 * r394134;
double r394136 = r394135 + r394120;
double r394137 = sqrt(r394136);
double r394138 = r394083 * r394137;
double r394139 = 3.627341585498709e-162;
bool r394140 = r394080 <= r394139;
double r394141 = 2.05230024370401e+31;
bool r394142 = r394080 <= r394141;
double r394143 = r394111 * r394111;
double r394144 = r394143 + r394120;
double r394145 = sqrt(r394144);
double r394146 = r394083 * r394145;
double r394147 = 1.891486701681941e+68;
bool r394148 = r394080 <= r394147;
double r394149 = 2.833616540079866e+153;
bool r394150 = r394080 <= r394149;
double r394151 = r394083 * r394102;
double r394152 = r394150 ? r394123 : r394151;
double r394153 = r394148 ? r394108 : r394152;
double r394154 = r394142 ? r394146 : r394153;
double r394155 = r394140 ? r394108 : r394154;
double r394156 = r394127 ? r394138 : r394155;
double r394157 = r394125 ? r394108 : r394156;
double r394158 = r394110 ? r394123 : r394157;
double r394159 = r394106 ? r394108 : r394158;
double r394160 = r394082 ? r394104 : r394159;
return r394160;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if lambda2 < -2.621984700814708e+208Initial program 64.0
Taylor expanded around inf 50.0
if -2.621984700814708e+208 < lambda2 < -5.5068609279832755e+47 or -343.89931459918483 < lambda2 < -1.3990149607820454e-33 or 1.1505150553105537e-291 < lambda2 < 3.627341585498709e-162 or 2.05230024370401e+31 < lambda2 < 1.891486701681941e+68Initial program 38.0
Taylor expanded around 0 44.7
if -5.5068609279832755e+47 < lambda2 < -343.89931459918483 or 1.891486701681941e+68 < lambda2 < 2.833616540079866e+153Initial program 32.9
rmApplied associate-*l*32.9
if -1.3990149607820454e-33 < lambda2 < 1.1505150553105537e-291Initial program 31.4
rmApplied associate-*l*31.4
rmApplied flip--31.4
Applied associate-*l/31.4
Applied associate-*r/31.4
if 3.627341585498709e-162 < lambda2 < 2.05230024370401e+31Initial program 30.9
rmApplied associate-*l*30.9
Taylor expanded around 0 33.4
if 2.833616540079866e+153 < lambda2 Initial program 63.8
Taylor expanded around -inf 52.6
Final simplification39.5
herbie shell --seed 2020060
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
:precision binary64
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))