Average Error: 24.5 → 24.5
Time: 55.1s
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(R \cdot 2\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \cos \phi_1 \cdot \cos \phi_2, \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}}{\sqrt{\mathsf{log1p}\left(\mathsf{expm1}\left(\cos \left(\frac{\phi_1 - \phi_2}{2}\right)\right)\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\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(R \cdot 2\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \cos \phi_1 \cdot \cos \phi_2, \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}}{\sqrt{\mathsf{log1p}\left(\mathsf{expm1}\left(\cos \left(\frac{\phi_1 - \phi_2}{2}\right)\right)\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2649783 = R;
        double r2649784 = 2.0;
        double r2649785 = phi1;
        double r2649786 = phi2;
        double r2649787 = r2649785 - r2649786;
        double r2649788 = r2649787 / r2649784;
        double r2649789 = sin(r2649788);
        double r2649790 = pow(r2649789, r2649784);
        double r2649791 = cos(r2649785);
        double r2649792 = cos(r2649786);
        double r2649793 = r2649791 * r2649792;
        double r2649794 = lambda1;
        double r2649795 = lambda2;
        double r2649796 = r2649794 - r2649795;
        double r2649797 = r2649796 / r2649784;
        double r2649798 = sin(r2649797);
        double r2649799 = r2649793 * r2649798;
        double r2649800 = r2649799 * r2649798;
        double r2649801 = r2649790 + r2649800;
        double r2649802 = sqrt(r2649801);
        double r2649803 = 1.0;
        double r2649804 = r2649803 - r2649801;
        double r2649805 = sqrt(r2649804);
        double r2649806 = atan2(r2649802, r2649805);
        double r2649807 = r2649784 * r2649806;
        double r2649808 = r2649783 * r2649807;
        return r2649808;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2649809 = R;
        double r2649810 = 2.0;
        double r2649811 = r2649809 * r2649810;
        double r2649812 = lambda1;
        double r2649813 = lambda2;
        double r2649814 = r2649812 - r2649813;
        double r2649815 = r2649814 / r2649810;
        double r2649816 = sin(r2649815);
        double r2649817 = r2649816 * r2649816;
        double r2649818 = phi1;
        double r2649819 = cos(r2649818);
        double r2649820 = phi2;
        double r2649821 = cos(r2649820);
        double r2649822 = r2649819 * r2649821;
        double r2649823 = r2649818 - r2649820;
        double r2649824 = r2649823 / r2649810;
        double r2649825 = sin(r2649824);
        double r2649826 = r2649825 * r2649825;
        double r2649827 = fma(r2649817, r2649822, r2649826);
        double r2649828 = sqrt(r2649827);
        double r2649829 = cos(r2649824);
        double r2649830 = expm1(r2649829);
        double r2649831 = log1p(r2649830);
        double r2649832 = r2649831 * r2649829;
        double r2649833 = r2649822 * r2649817;
        double r2649834 = r2649832 - r2649833;
        double r2649835 = sqrt(r2649834);
        double r2649836 = atan2(r2649828, r2649835);
        double r2649837 = r2649811 * r2649836;
        return r2649837;
}

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(R \cdot 2\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \cos \phi_2 \cdot \cos \phi_1, \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \left(\cos \phi_2 \cdot \cos \phi_1\right)}}}\]
  3. Using strategy rm
  4. Applied log1p-expm1-u24.5

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

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

Reproduce

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