Average Error: 24.4 → 24.1
Time: 57.5s
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)\]
\[\tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \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(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \left(\frac{\lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1}{2}\right) - \cos \left(\frac{\lambda_1}{2}\right) \cdot \sin \left(\frac{\lambda_2}{2}\right)\right)\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \left(\frac{\lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1}{2}\right) - \cos \left(\frac{\lambda_1}{2}\right) \cdot \sin \left(\frac{\lambda_2}{2}\right)\right)\right)}} \cdot \left(R + R\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)
\tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \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(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \left(\frac{\lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1}{2}\right) - \cos \left(\frac{\lambda_1}{2}\right) \cdot \sin \left(\frac{\lambda_2}{2}\right)\right)\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \left(\frac{\lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1}{2}\right) - \cos \left(\frac{\lambda_1}{2}\right) \cdot \sin \left(\frac{\lambda_2}{2}\right)\right)\right)}} \cdot \left(R + R\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2773621 = R;
        double r2773622 = 2.0;
        double r2773623 = phi1;
        double r2773624 = phi2;
        double r2773625 = r2773623 - r2773624;
        double r2773626 = r2773625 / r2773622;
        double r2773627 = sin(r2773626);
        double r2773628 = pow(r2773627, r2773622);
        double r2773629 = cos(r2773623);
        double r2773630 = cos(r2773624);
        double r2773631 = r2773629 * r2773630;
        double r2773632 = lambda1;
        double r2773633 = lambda2;
        double r2773634 = r2773632 - r2773633;
        double r2773635 = r2773634 / r2773622;
        double r2773636 = sin(r2773635);
        double r2773637 = r2773631 * r2773636;
        double r2773638 = r2773637 * r2773636;
        double r2773639 = r2773628 + r2773638;
        double r2773640 = sqrt(r2773639);
        double r2773641 = 1.0;
        double r2773642 = r2773641 - r2773639;
        double r2773643 = sqrt(r2773642);
        double r2773644 = atan2(r2773640, r2773643);
        double r2773645 = r2773622 * r2773644;
        double r2773646 = r2773621 * r2773645;
        return r2773646;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2773647 = lambda1;
        double r2773648 = lambda2;
        double r2773649 = r2773647 - r2773648;
        double r2773650 = 2.0;
        double r2773651 = r2773649 / r2773650;
        double r2773652 = sin(r2773651);
        double r2773653 = phi1;
        double r2773654 = cos(r2773653);
        double r2773655 = phi2;
        double r2773656 = cos(r2773655);
        double r2773657 = r2773654 * r2773656;
        double r2773658 = r2773652 * r2773657;
        double r2773659 = r2773653 - r2773655;
        double r2773660 = r2773659 / r2773650;
        double r2773661 = sin(r2773660);
        double r2773662 = r2773661 * r2773661;
        double r2773663 = fma(r2773658, r2773652, r2773662);
        double r2773664 = sqrt(r2773663);
        double r2773665 = cos(r2773660);
        double r2773666 = r2773665 * r2773665;
        double r2773667 = r2773648 / r2773650;
        double r2773668 = cos(r2773667);
        double r2773669 = r2773647 / r2773650;
        double r2773670 = sin(r2773669);
        double r2773671 = r2773668 * r2773670;
        double r2773672 = cos(r2773669);
        double r2773673 = sin(r2773667);
        double r2773674 = r2773672 * r2773673;
        double r2773675 = r2773671 - r2773674;
        double r2773676 = r2773657 * r2773675;
        double r2773677 = log1p(r2773675);
        double r2773678 = expm1(r2773677);
        double r2773679 = r2773676 * r2773678;
        double r2773680 = r2773666 - r2773679;
        double r2773681 = sqrt(r2773680);
        double r2773682 = atan2(r2773664, r2773681);
        double r2773683 = R;
        double r2773684 = r2773683 + r2773683;
        double r2773685 = r2773682 * r2773684;
        return r2773685;
}

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.4

    \[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.3

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

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

    \[\leadsto \left(R + R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \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(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \color{blue}{\left(\frac{\lambda_1}{2} - \frac{\lambda_2}{2}\right)}\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right)}}\]
  7. Applied sin-diff24.5

    \[\leadsto \left(R + R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \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(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\sin \left(\frac{\lambda_1}{2}\right) \cdot \cos \left(\frac{\lambda_2}{2}\right) - \cos \left(\frac{\lambda_1}{2}\right) \cdot \sin \left(\frac{\lambda_2}{2}\right)\right)}\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right)}}\]
  8. Using strategy rm
  9. Applied div-sub24.5

    \[\leadsto \left(R + R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \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(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \left(\frac{\lambda_1}{2}\right) \cdot \cos \left(\frac{\lambda_2}{2}\right) - \cos \left(\frac{\lambda_1}{2}\right) \cdot \sin \left(\frac{\lambda_2}{2}\right)\right)\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \color{blue}{\left(\frac{\lambda_1}{2} - \frac{\lambda_2}{2}\right)}\right)\right)}}\]
  10. Applied sin-diff24.1

    \[\leadsto \left(R + R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \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(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \left(\frac{\lambda_1}{2}\right) \cdot \cos \left(\frac{\lambda_2}{2}\right) - \cos \left(\frac{\lambda_1}{2}\right) \cdot \sin \left(\frac{\lambda_2}{2}\right)\right)\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\color{blue}{\sin \left(\frac{\lambda_1}{2}\right) \cdot \cos \left(\frac{\lambda_2}{2}\right) - \cos \left(\frac{\lambda_1}{2}\right) \cdot \sin \left(\frac{\lambda_2}{2}\right)}\right)\right)}}\]
  11. Final simplification24.1

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

Reproduce

herbie shell --seed 2019163 +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))))))))))