Average Error: 24.5 → 24.5
Time: 47.9s
Precision: 64
\[R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)\]
\[\left(2 \cdot R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\sqrt[3]{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}, \left(\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2, {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\]
R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)
\left(2 \cdot R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\sqrt[3]{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}, \left(\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2, {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r4095837 = R;
        double r4095838 = 2.0;
        double r4095839 = phi1;
        double r4095840 = phi2;
        double r4095841 = r4095839 - r4095840;
        double r4095842 = r4095841 / r4095838;
        double r4095843 = sin(r4095842);
        double r4095844 = pow(r4095843, r4095838);
        double r4095845 = cos(r4095839);
        double r4095846 = cos(r4095840);
        double r4095847 = r4095845 * r4095846;
        double r4095848 = lambda1;
        double r4095849 = lambda2;
        double r4095850 = r4095848 - r4095849;
        double r4095851 = r4095850 / r4095838;
        double r4095852 = sin(r4095851);
        double r4095853 = r4095847 * r4095852;
        double r4095854 = r4095853 * r4095852;
        double r4095855 = r4095844 + r4095854;
        double r4095856 = sqrt(r4095855);
        double r4095857 = 1.0;
        double r4095858 = r4095857 - r4095855;
        double r4095859 = sqrt(r4095858);
        double r4095860 = atan2(r4095856, r4095859);
        double r4095861 = r4095838 * r4095860;
        double r4095862 = r4095837 * r4095861;
        return r4095862;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r4095863 = 2.0;
        double r4095864 = R;
        double r4095865 = r4095863 * r4095864;
        double r4095866 = lambda1;
        double r4095867 = lambda2;
        double r4095868 = r4095866 - r4095867;
        double r4095869 = r4095868 / r4095863;
        double r4095870 = sin(r4095869);
        double r4095871 = phi2;
        double r4095872 = cos(r4095871);
        double r4095873 = phi1;
        double r4095874 = cos(r4095873);
        double r4095875 = r4095874 * r4095870;
        double r4095876 = r4095872 * r4095875;
        double r4095877 = r4095873 - r4095871;
        double r4095878 = r4095877 / r4095863;
        double r4095879 = sin(r4095878);
        double r4095880 = pow(r4095879, r4095863);
        double r4095881 = fma(r4095870, r4095876, r4095880);
        double r4095882 = sqrt(r4095881);
        double r4095883 = 1.0;
        double r4095884 = r4095870 * r4095870;
        double r4095885 = r4095884 * r4095870;
        double r4095886 = cbrt(r4095885);
        double r4095887 = exp(r4095870);
        double r4095888 = log(r4095887);
        double r4095889 = r4095888 * r4095874;
        double r4095890 = r4095889 * r4095872;
        double r4095891 = fma(r4095886, r4095890, r4095880);
        double r4095892 = r4095883 - r4095891;
        double r4095893 = sqrt(r4095892);
        double r4095894 = atan2(r4095882, r4095893);
        double r4095895 = r4095865 * r4095894;
        return r4095895;
}

Error

Bits error versus R

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Derivation

  1. Initial program 24.5

    \[R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)\]
  2. Simplified24.5

    \[\leadsto \color{blue}{\left(2 \cdot R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2, {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2, {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}}\]
  3. Using strategy rm
  4. Applied add-log-exp24.5

    \[\leadsto \left(2 \cdot R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2, {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \left(\color{blue}{\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)} \cdot \cos \phi_1\right) \cdot \cos \phi_2, {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\]
  5. Using strategy rm
  6. Applied add-cbrt-cube24.5

    \[\leadsto \left(2 \cdot R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2, {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\color{blue}{\sqrt[3]{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}, \left(\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2, {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\]
  7. Final simplification24.5

    \[\leadsto \left(2 \cdot R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \cos \phi_2 \cdot \left(\cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right), {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\sqrt[3]{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}, \left(\log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right) \cdot \cos \phi_1\right) \cdot \cos \phi_2, {\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2}\right)}}\]

Reproduce

herbie shell --seed 2019172 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Distance on a great circle"
  (* R (* 2.0 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))) (sqrt (- 1.0 (+ (pow (sin (/ (- phi1 phi2) 2.0)) 2.0) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2.0))) (sin (/ (- lambda1 lambda2) 2.0))))))))))