Average Error: 38.8 → 28.5
Time: 26.6s
Precision: 64
\[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(\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) \le 9.763007400432452359514504801297217953397 \cdot 10^{300}:\\ \;\;\;\;R \cdot \sqrt{\left(\left({\left(\cos \left(0.5 \cdot \phi_2\right)\right)}^{2} \cdot \left({\left(\cos \left(0.5 \cdot \phi_1\right)\right)}^{2} \cdot {\lambda_2}^{2}\right) + \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot {\lambda_1}^{2} + {\left(\sin \left(0.5 \cdot \phi_2\right)\right)}^{2} \cdot \left({\lambda_2}^{2} \cdot {\left(\sin \left(0.5 \cdot \phi_1\right)\right)}^{2}\right)\right)\right) - \left(\cos \left(0.5 \cdot \phi_2\right) \cdot \left(\sin \left(0.5 \cdot \phi_1\right) \cdot \left(\cos \left(0.5 \cdot \phi_1\right) \cdot \left(\sin \left(0.5 \cdot \phi_2\right) \cdot {\lambda_2}^{2}\right)\right)\right) + \left(2 \cdot \left(\lambda_2 \cdot \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot \lambda_1\right)\right) + \cos \left(0.5 \cdot \phi_1\right) \cdot \left(\sin \left(0.5 \cdot \phi_2\right) \cdot \left(\cos \left(0.5 \cdot \phi_2\right) \cdot \left(\sin \left(0.5 \cdot \phi_1\right) \cdot {\lambda_2}^{2}\right)\right)\right)\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\ \mathbf{else}:\\ \;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\ \end{array}\]
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(\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) \le 9.763007400432452359514504801297217953397 \cdot 10^{300}:\\
\;\;\;\;R \cdot \sqrt{\left(\left({\left(\cos \left(0.5 \cdot \phi_2\right)\right)}^{2} \cdot \left({\left(\cos \left(0.5 \cdot \phi_1\right)\right)}^{2} \cdot {\lambda_2}^{2}\right) + \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot {\lambda_1}^{2} + {\left(\sin \left(0.5 \cdot \phi_2\right)\right)}^{2} \cdot \left({\lambda_2}^{2} \cdot {\left(\sin \left(0.5 \cdot \phi_1\right)\right)}^{2}\right)\right)\right) - \left(\cos \left(0.5 \cdot \phi_2\right) \cdot \left(\sin \left(0.5 \cdot \phi_1\right) \cdot \left(\cos \left(0.5 \cdot \phi_1\right) \cdot \left(\sin \left(0.5 \cdot \phi_2\right) \cdot {\lambda_2}^{2}\right)\right)\right) + \left(2 \cdot \left(\lambda_2 \cdot \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot \lambda_1\right)\right) + \cos \left(0.5 \cdot \phi_1\right) \cdot \left(\sin \left(0.5 \cdot \phi_2\right) \cdot \left(\cos \left(0.5 \cdot \phi_2\right) \cdot \left(\sin \left(0.5 \cdot \phi_1\right) \cdot {\lambda_2}^{2}\right)\right)\right)\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\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 r111699 = R;
        double r111700 = lambda1;
        double r111701 = lambda2;
        double r111702 = r111700 - r111701;
        double r111703 = phi1;
        double r111704 = phi2;
        double r111705 = r111703 + r111704;
        double r111706 = 2.0;
        double r111707 = r111705 / r111706;
        double r111708 = cos(r111707);
        double r111709 = r111702 * r111708;
        double r111710 = r111709 * r111709;
        double r111711 = r111703 - r111704;
        double r111712 = r111711 * r111711;
        double r111713 = r111710 + r111712;
        double r111714 = sqrt(r111713);
        double r111715 = r111699 * r111714;
        return r111715;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r111716 = lambda1;
        double r111717 = lambda2;
        double r111718 = r111716 - r111717;
        double r111719 = phi1;
        double r111720 = phi2;
        double r111721 = r111719 + r111720;
        double r111722 = 2.0;
        double r111723 = r111721 / r111722;
        double r111724 = cos(r111723);
        double r111725 = r111718 * r111724;
        double r111726 = r111725 * r111725;
        double r111727 = r111719 - r111720;
        double r111728 = r111727 * r111727;
        double r111729 = r111726 + r111728;
        double r111730 = 9.763007400432452e+300;
        bool r111731 = r111729 <= r111730;
        double r111732 = R;
        double r111733 = 0.5;
        double r111734 = r111733 * r111720;
        double r111735 = cos(r111734);
        double r111736 = 2.0;
        double r111737 = pow(r111735, r111736);
        double r111738 = r111733 * r111719;
        double r111739 = cos(r111738);
        double r111740 = pow(r111739, r111736);
        double r111741 = pow(r111717, r111736);
        double r111742 = r111740 * r111741;
        double r111743 = r111737 * r111742;
        double r111744 = r111720 + r111719;
        double r111745 = r111733 * r111744;
        double r111746 = cos(r111745);
        double r111747 = pow(r111746, r111736);
        double r111748 = pow(r111716, r111736);
        double r111749 = r111747 * r111748;
        double r111750 = sin(r111734);
        double r111751 = pow(r111750, r111736);
        double r111752 = sin(r111738);
        double r111753 = pow(r111752, r111736);
        double r111754 = r111741 * r111753;
        double r111755 = r111751 * r111754;
        double r111756 = r111749 + r111755;
        double r111757 = r111743 + r111756;
        double r111758 = r111750 * r111741;
        double r111759 = r111739 * r111758;
        double r111760 = r111752 * r111759;
        double r111761 = r111735 * r111760;
        double r111762 = r111747 * r111716;
        double r111763 = r111717 * r111762;
        double r111764 = r111736 * r111763;
        double r111765 = r111752 * r111741;
        double r111766 = r111735 * r111765;
        double r111767 = r111750 * r111766;
        double r111768 = r111739 * r111767;
        double r111769 = r111764 + r111768;
        double r111770 = r111761 + r111769;
        double r111771 = r111757 - r111770;
        double r111772 = r111771 + r111728;
        double r111773 = sqrt(r111772);
        double r111774 = r111732 * r111773;
        double r111775 = r111720 - r111719;
        double r111776 = r111732 * r111775;
        double r111777 = r111731 ? r111774 : r111776;
        return r111777;
}

Error

Bits error versus R

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))) < 9.763007400432452e+300

    1. Initial program 1.6

      \[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)}\]
    2. Taylor expanded around inf 1.6

      \[\leadsto R \cdot \sqrt{\color{blue}{\left(\left({\lambda_2}^{2} \cdot {\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} + {\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot {\lambda_1}^{2}\right) - 2 \cdot \left(\lambda_2 \cdot \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot \lambda_1\right)\right)\right)} + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    3. Using strategy rm
    4. Applied distribute-lft-in1.6

      \[\leadsto R \cdot \sqrt{\left(\left({\lambda_2}^{2} \cdot {\left(\cos \color{blue}{\left(0.5 \cdot \phi_2 + 0.5 \cdot \phi_1\right)}\right)}^{2} + {\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot {\lambda_1}^{2}\right) - 2 \cdot \left(\lambda_2 \cdot \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot \lambda_1\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    5. Applied cos-sum1.0

      \[\leadsto R \cdot \sqrt{\left(\left({\lambda_2}^{2} \cdot {\color{blue}{\left(\cos \left(0.5 \cdot \phi_2\right) \cdot \cos \left(0.5 \cdot \phi_1\right) - \sin \left(0.5 \cdot \phi_2\right) \cdot \sin \left(0.5 \cdot \phi_1\right)\right)}}^{2} + {\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot {\lambda_1}^{2}\right) - 2 \cdot \left(\lambda_2 \cdot \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot \lambda_1\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    6. Simplified1.0

      \[\leadsto R \cdot \sqrt{\left(\left({\lambda_2}^{2} \cdot {\left(\color{blue}{\cos \left(\phi_2 \cdot 0.5\right) \cdot \cos \left(\phi_1 \cdot 0.5\right)} - \sin \left(0.5 \cdot \phi_2\right) \cdot \sin \left(0.5 \cdot \phi_1\right)\right)}^{2} + {\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot {\lambda_1}^{2}\right) - 2 \cdot \left(\lambda_2 \cdot \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot \lambda_1\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    7. Simplified1.0

      \[\leadsto R \cdot \sqrt{\left(\left({\lambda_2}^{2} \cdot {\left(\cos \left(\phi_2 \cdot 0.5\right) \cdot \cos \left(\phi_1 \cdot 0.5\right) - \color{blue}{\sin \left(\phi_2 \cdot 0.5\right) \cdot \sin \left(\phi_1 \cdot 0.5\right)}\right)}^{2} + {\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot {\lambda_1}^{2}\right) - 2 \cdot \left(\lambda_2 \cdot \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot \lambda_1\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
    8. Taylor expanded around -inf 1.0

      \[\leadsto R \cdot \sqrt{\color{blue}{\left(\left({\left(\cos \left(0.5 \cdot \phi_2\right)\right)}^{2} \cdot \left({\left(\cos \left(0.5 \cdot \phi_1\right)\right)}^{2} \cdot {\lambda_2}^{2}\right) + \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot {\lambda_1}^{2} + {\left(\sin \left(0.5 \cdot \phi_2\right)\right)}^{2} \cdot \left({\lambda_2}^{2} \cdot {\left(\sin \left(0.5 \cdot \phi_1\right)\right)}^{2}\right)\right)\right) - \left(\cos \left(0.5 \cdot \phi_2\right) \cdot \left(\sin \left(0.5 \cdot \phi_1\right) \cdot \left(\cos \left(0.5 \cdot \phi_1\right) \cdot \left(\sin \left(0.5 \cdot \phi_2\right) \cdot {\lambda_2}^{2}\right)\right)\right) + \left(2 \cdot \left(\lambda_2 \cdot \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot \lambda_1\right)\right) + \cos \left(0.5 \cdot \phi_1\right) \cdot \left(\sin \left(0.5 \cdot \phi_2\right) \cdot \left(\cos \left(0.5 \cdot \phi_2\right) \cdot \left(\sin \left(0.5 \cdot \phi_1\right) \cdot {\lambda_2}^{2}\right)\right)\right)\right)\right)\right)} + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]

    if 9.763007400432452e+300 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2)))

    1. Initial program 62.9

      \[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)}\]
    2. Taylor expanded around 0 46.2

      \[\leadsto R \cdot \color{blue}{\left(\phi_2 - \phi_1\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification28.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;\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) \le 9.763007400432452359514504801297217953397 \cdot 10^{300}:\\ \;\;\;\;R \cdot \sqrt{\left(\left({\left(\cos \left(0.5 \cdot \phi_2\right)\right)}^{2} \cdot \left({\left(\cos \left(0.5 \cdot \phi_1\right)\right)}^{2} \cdot {\lambda_2}^{2}\right) + \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot {\lambda_1}^{2} + {\left(\sin \left(0.5 \cdot \phi_2\right)\right)}^{2} \cdot \left({\lambda_2}^{2} \cdot {\left(\sin \left(0.5 \cdot \phi_1\right)\right)}^{2}\right)\right)\right) - \left(\cos \left(0.5 \cdot \phi_2\right) \cdot \left(\sin \left(0.5 \cdot \phi_1\right) \cdot \left(\cos \left(0.5 \cdot \phi_1\right) \cdot \left(\sin \left(0.5 \cdot \phi_2\right) \cdot {\lambda_2}^{2}\right)\right)\right) + \left(2 \cdot \left(\lambda_2 \cdot \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot \lambda_1\right)\right) + \cos \left(0.5 \cdot \phi_1\right) \cdot \left(\sin \left(0.5 \cdot \phi_2\right) \cdot \left(\cos \left(0.5 \cdot \phi_2\right) \cdot \left(\sin \left(0.5 \cdot \phi_1\right) \cdot {\lambda_2}^{2}\right)\right)\right)\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\ \mathbf{else}:\\ \;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019318 
(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))))))