Average Error: 37.4 → 3.6
Time: 31.7s
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)}\]
\[\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right), \phi_1 - \phi_2\right) \cdot R\]
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)}
\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right), \phi_1 - \phi_2\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2463627 = R;
        double r2463628 = lambda1;
        double r2463629 = lambda2;
        double r2463630 = r2463628 - r2463629;
        double r2463631 = phi1;
        double r2463632 = phi2;
        double r2463633 = r2463631 + r2463632;
        double r2463634 = 2.0;
        double r2463635 = r2463633 / r2463634;
        double r2463636 = cos(r2463635);
        double r2463637 = r2463630 * r2463636;
        double r2463638 = r2463637 * r2463637;
        double r2463639 = r2463631 - r2463632;
        double r2463640 = r2463639 * r2463639;
        double r2463641 = r2463638 + r2463640;
        double r2463642 = sqrt(r2463641);
        double r2463643 = r2463627 * r2463642;
        return r2463643;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2463644 = lambda1;
        double r2463645 = lambda2;
        double r2463646 = r2463644 - r2463645;
        double r2463647 = phi1;
        double r2463648 = phi2;
        double r2463649 = r2463647 + r2463648;
        double r2463650 = 0.5;
        double r2463651 = r2463649 * r2463650;
        double r2463652 = cos(r2463651);
        double r2463653 = r2463646 * r2463652;
        double r2463654 = r2463647 - r2463648;
        double r2463655 = hypot(r2463653, r2463654);
        double r2463656 = R;
        double r2463657 = r2463655 * r2463656;
        return r2463657;
}

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

    \[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. Simplified3.6

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

    \[\leadsto \mathsf{hypot}\left(\color{blue}{\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)}, \phi_1 - \phi_2\right) \cdot R\]
  4. Simplified3.6

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

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

Reproduce

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