Average Error: 38.7 → 33.6
Time: 10.1s
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}\;\phi_2 \le -2.16050575676768281 \cdot 10^{135} \lor \neg \left(\phi_2 \le 1.7815555754871838 \cdot 10^{53}\right):\\ \;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\ \mathbf{else}:\\ \;\;\;\;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 \left(\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\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}\;\phi_2 \le -2.16050575676768281 \cdot 10^{135} \lor \neg \left(\phi_2 \le 1.7815555754871838 \cdot 10^{53}\right):\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\

\mathbf{else}:\\
\;\;\;\;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 \left(\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\

\end{array}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r61759 = R;
        double r61760 = lambda1;
        double r61761 = lambda2;
        double r61762 = r61760 - r61761;
        double r61763 = phi1;
        double r61764 = phi2;
        double r61765 = r61763 + r61764;
        double r61766 = 2.0;
        double r61767 = r61765 / r61766;
        double r61768 = cos(r61767);
        double r61769 = r61762 * r61768;
        double r61770 = r61769 * r61769;
        double r61771 = r61763 - r61764;
        double r61772 = r61771 * r61771;
        double r61773 = r61770 + r61772;
        double r61774 = sqrt(r61773);
        double r61775 = r61759 * r61774;
        return r61775;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r61776 = phi2;
        double r61777 = -2.1605057567676828e+135;
        bool r61778 = r61776 <= r61777;
        double r61779 = 1.7815555754871838e+53;
        bool r61780 = r61776 <= r61779;
        double r61781 = !r61780;
        bool r61782 = r61778 || r61781;
        double r61783 = R;
        double r61784 = phi1;
        double r61785 = r61776 - r61784;
        double r61786 = r61783 * r61785;
        double r61787 = lambda1;
        double r61788 = lambda2;
        double r61789 = r61787 - r61788;
        double r61790 = r61784 + r61776;
        double r61791 = 2.0;
        double r61792 = r61790 / r61791;
        double r61793 = cos(r61792);
        double r61794 = r61789 * r61793;
        double r61795 = cbrt(r61793);
        double r61796 = r61795 * r61795;
        double r61797 = r61796 * r61795;
        double r61798 = r61789 * r61797;
        double r61799 = r61794 * r61798;
        double r61800 = r61784 - r61776;
        double r61801 = r61800 * r61800;
        double r61802 = r61799 + r61801;
        double r61803 = sqrt(r61802);
        double r61804 = r61783 * r61803;
        double r61805 = r61782 ? r61786 : r61804;
        return r61805;
}

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 phi2 < -2.1605057567676828e+135 or 1.7815555754871838e+53 < phi2

    1. Initial program 54.0

      \[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 37.3

      \[\leadsto R \cdot \color{blue}{\left(\phi_2 - \phi_1\right)}\]

    if -2.1605057567676828e+135 < phi2 < 1.7815555754871838e+53

    1. Initial program 31.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. Using strategy rm
    3. Applied add-cube-cbrt32.0

      \[\leadsto 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 \color{blue}{\left(\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)}\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification33.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_2 \le -2.16050575676768281 \cdot 10^{135} \lor \neg \left(\phi_2 \le 1.7815555754871838 \cdot 10^{53}\right):\\ \;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\ \mathbf{else}:\\ \;\;\;\;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 \left(\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\ \end{array}\]

Reproduce

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