double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r35109616 = R;
double r35109617 = lambda1;
double r35109618 = lambda2;
double r35109619 = r35109617 - r35109618;
double r35109620 = phi1;
double r35109621 = phi2;
double r35109622 = r35109620 + r35109621;
double r35109623 = 2.0;
double r35109624 = r35109622 / r35109623;
double r35109625 = cos(r35109624);
double r35109626 = r35109619 * r35109625;
double r35109627 = r35109626 * r35109626;
double r35109628 = r35109620 - r35109621;
double r35109629 = r35109628 * r35109628;
double r35109630 = r35109627 + r35109629;
double r35109631 = sqrt(r35109630);
double r35109632 = r35109616 * r35109631;
return r35109632;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r35109633 = phi1;
double r35109634 = phi2;
double r35109635 = r35109633 - r35109634;
double r35109636 = r35109635 * r35109635;
double r35109637 = lambda1;
double r35109638 = lambda2;
double r35109639 = r35109637 - r35109638;
double r35109640 = r35109633 + r35109634;
double r35109641 = 2.0;
double r35109642 = r35109640 / r35109641;
double r35109643 = cos(r35109642);
double r35109644 = r35109639 * r35109643;
double r35109645 = r35109644 * r35109644;
double r35109646 = r35109636 + r35109645;
double r35109647 = 1.8901552595312907e+297;
bool r35109648 = r35109646 <= r35109647;
double r35109649 = -r35109643;
double r35109650 = r35109638 * r35109649;
double r35109651 = r35109643 * r35109643;
double r35109652 = r35109643 * r35109651;
double r35109653 = cbrt(r35109652);
double r35109654 = exp(r35109653);
double r35109655 = log(r35109654);
double r35109656 = r35109655 * r35109637;
double r35109657 = r35109650 + r35109656;
double r35109658 = r35109657 * r35109644;
double r35109659 = r35109658 + r35109636;
double r35109660 = sqrt(r35109659);
double r35109661 = R;
double r35109662 = r35109660 * r35109661;
double r35109663 = r35109634 - r35109633;
double r35109664 = r35109661 * r35109663;
double r35109665 = r35109648 ? r35109662 : r35109664;
return r35109665;
}
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}\;\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \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) \le 1.8901552595312907 \cdot 10^{+297}:\\
\;\;\;\;\sqrt{\left(\lambda_2 \cdot \left(-\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \log \left(e^{\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}}\right) \cdot \lambda_1\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)} \cdot R\\
\mathbf{else}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\end{array}


Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
if (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) < 1.8901552595312907e+297Initial program 1.8
rmApplied *-commutative1.8
rmApplied sub-neg1.8
Applied distribute-rgt-in1.8
rmApplied add-log-exp1.8
rmApplied add-cbrt-cube1.8
if 1.8901552595312907e+297 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 59.6
rmApplied *-commutative59.6
Taylor expanded around 0 47.3
Final simplification30.1
herbie shell --seed 2019102
(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))))))