Average Error: 37.1 → 4.1
Time: 22.4s
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)}\]
\[R \cdot \mathsf{hypot}\left(\left(\mathsf{log1p}\left(\left(\mathsf{expm1}\left(\left(\cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right)\right)\right)\right)\right) \cdot \left(\lambda_1 - \lambda_2\right)\right), \left(\phi_1 - \phi_2\right)\right)\]
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)}
R \cdot \mathsf{hypot}\left(\left(\mathsf{log1p}\left(\left(\mathsf{expm1}\left(\left(\cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right)\right)\right)\right)\right) \cdot \left(\lambda_1 - \lambda_2\right)\right), \left(\phi_1 - \phi_2\right)\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1444666 = R;
        double r1444667 = lambda1;
        double r1444668 = lambda2;
        double r1444669 = r1444667 - r1444668;
        double r1444670 = phi1;
        double r1444671 = phi2;
        double r1444672 = r1444670 + r1444671;
        double r1444673 = 2.0;
        double r1444674 = r1444672 / r1444673;
        double r1444675 = cos(r1444674);
        double r1444676 = r1444669 * r1444675;
        double r1444677 = r1444676 * r1444676;
        double r1444678 = r1444670 - r1444671;
        double r1444679 = r1444678 * r1444678;
        double r1444680 = r1444677 + r1444679;
        double r1444681 = sqrt(r1444680);
        double r1444682 = r1444666 * r1444681;
        return r1444682;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1444683 = R;
        double r1444684 = phi2;
        double r1444685 = phi1;
        double r1444686 = r1444684 + r1444685;
        double r1444687 = 0.5;
        double r1444688 = r1444686 * r1444687;
        double r1444689 = cos(r1444688);
        double r1444690 = expm1(r1444689);
        double r1444691 = log1p(r1444690);
        double r1444692 = lambda1;
        double r1444693 = lambda2;
        double r1444694 = r1444692 - r1444693;
        double r1444695 = r1444691 * r1444694;
        double r1444696 = r1444685 - r1444684;
        double r1444697 = hypot(r1444695, r1444696);
        double r1444698 = r1444683 * r1444697;
        return r1444698;
}

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. Initial program 37.1

    \[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. Simplified4.1

    \[\leadsto \color{blue}{\mathsf{hypot}\left(\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right), \left(\phi_1 - \phi_2\right)\right) \cdot R}\]
  3. Taylor expanded around inf 4.1

    \[\leadsto \mathsf{hypot}\left(\color{blue}{\left(\cos \left(\frac{1}{2} \cdot \left(\phi_1 + \phi_2\right)\right) \cdot \lambda_1 - \lambda_2 \cdot \cos \left(\frac{1}{2} \cdot \left(\phi_1 + \phi_2\right)\right)\right)}, \left(\phi_1 - \phi_2\right)\right) \cdot R\]
  4. Simplified4.1

    \[\leadsto \mathsf{hypot}\left(\color{blue}{\left(\cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right)}, \left(\phi_1 - \phi_2\right)\right) \cdot R\]
  5. Using strategy rm
  6. Applied log1p-expm1-u4.1

    \[\leadsto \mathsf{hypot}\left(\left(\color{blue}{\mathsf{log1p}\left(\left(\mathsf{expm1}\left(\left(\cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right)\right)\right)\right)\right)} \cdot \left(\lambda_1 - \lambda_2\right)\right), \left(\phi_1 - \phi_2\right)\right) \cdot R\]
  7. Final simplification4.1

    \[\leadsto R \cdot \mathsf{hypot}\left(\left(\mathsf{log1p}\left(\left(\mathsf{expm1}\left(\left(\cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right)\right)\right)\right)\right) \cdot \left(\lambda_1 - \lambda_2\right)\right), \left(\phi_1 - \phi_2\right)\right)\]

Reproduce

herbie shell --seed 2019128 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Equirectangular approximation to distance on a great circle"
  (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))