Average Error: 24.9 → 14.4
Time: 57.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 \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right), \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), {\left(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right), {\left(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2}\right)}}\right) \cdot 2\]
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 \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right), \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), {\left(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \log \left(e^{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right), {\left(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2}\right)}}\right) \cdot 2
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r7141696 = R;
        double r7141697 = 2.0;
        double r7141698 = phi1;
        double r7141699 = phi2;
        double r7141700 = r7141698 - r7141699;
        double r7141701 = r7141700 / r7141697;
        double r7141702 = sin(r7141701);
        double r7141703 = pow(r7141702, r7141697);
        double r7141704 = cos(r7141698);
        double r7141705 = cos(r7141699);
        double r7141706 = r7141704 * r7141705;
        double r7141707 = lambda1;
        double r7141708 = lambda2;
        double r7141709 = r7141707 - r7141708;
        double r7141710 = r7141709 / r7141697;
        double r7141711 = sin(r7141710);
        double r7141712 = r7141706 * r7141711;
        double r7141713 = r7141712 * r7141711;
        double r7141714 = r7141703 + r7141713;
        double r7141715 = sqrt(r7141714);
        double r7141716 = 1.0;
        double r7141717 = r7141716 - r7141714;
        double r7141718 = sqrt(r7141717);
        double r7141719 = atan2(r7141715, r7141718);
        double r7141720 = r7141697 * r7141719;
        double r7141721 = r7141696 * r7141720;
        return r7141721;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r7141722 = R;
        double r7141723 = lambda1;
        double r7141724 = lambda2;
        double r7141725 = r7141723 - r7141724;
        double r7141726 = 2.0;
        double r7141727 = r7141725 / r7141726;
        double r7141728 = sin(r7141727);
        double r7141729 = expm1(r7141728);
        double r7141730 = log1p(r7141729);
        double r7141731 = phi1;
        double r7141732 = cos(r7141731);
        double r7141733 = phi2;
        double r7141734 = cos(r7141733);
        double r7141735 = r7141732 * r7141734;
        double r7141736 = r7141735 * r7141728;
        double r7141737 = r7141731 / r7141726;
        double r7141738 = sin(r7141737);
        double r7141739 = r7141733 / r7141726;
        double r7141740 = cos(r7141739);
        double r7141741 = r7141738 * r7141740;
        double r7141742 = cos(r7141737);
        double r7141743 = sin(r7141739);
        double r7141744 = r7141742 * r7141743;
        double r7141745 = r7141741 - r7141744;
        double r7141746 = pow(r7141745, r7141726);
        double r7141747 = fma(r7141730, r7141736, r7141746);
        double r7141748 = sqrt(r7141747);
        double r7141749 = 1.0;
        double r7141750 = exp(r7141728);
        double r7141751 = log(r7141750);
        double r7141752 = r7141735 * r7141751;
        double r7141753 = fma(r7141728, r7141752, r7141746);
        double r7141754 = r7141749 - r7141753;
        double r7141755 = sqrt(r7141754);
        double r7141756 = atan2(r7141748, r7141755);
        double r7141757 = r7141722 * r7141756;
        double r7141758 = r7141757 * r7141726;
        return r7141758;
}

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

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

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

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

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

    \[\leadsto \left(R \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), {\left(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), {\left(\sin \color{blue}{\left(\frac{\phi_1}{2} - \frac{\phi_2}{2}\right)}\right)}^{2}\right)}}\right) \cdot 2\]
  8. Applied sin-diff14.4

    \[\leadsto \left(R \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), {\left(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}^{2}\right)}}{\sqrt{1 - \mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), {\color{blue}{\left(\sin \left(\frac{\phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2}{2}\right) - \cos \left(\frac{\phi_1}{2}\right) \cdot \sin \left(\frac{\phi_2}{2}\right)\right)}}^{2}\right)}}\right) \cdot 2\]
  9. Using strategy rm
  10. Applied log1p-expm1-u14.4

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

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

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

Reproduce

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