Average Error: 37.4 → 3.6
Time: 25.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(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right)\right), \left(\phi_1 - \phi_2\right)\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(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right)\right), \left(\phi_1 - \phi_2\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2880575 = R;
        double r2880576 = lambda1;
        double r2880577 = lambda2;
        double r2880578 = r2880576 - r2880577;
        double r2880579 = phi1;
        double r2880580 = phi2;
        double r2880581 = r2880579 + r2880580;
        double r2880582 = 2.0;
        double r2880583 = r2880581 / r2880582;
        double r2880584 = cos(r2880583);
        double r2880585 = r2880578 * r2880584;
        double r2880586 = r2880585 * r2880585;
        double r2880587 = r2880579 - r2880580;
        double r2880588 = r2880587 * r2880587;
        double r2880589 = r2880586 + r2880588;
        double r2880590 = sqrt(r2880589);
        double r2880591 = r2880575 * r2880590;
        return r2880591;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2880592 = lambda1;
        double r2880593 = lambda2;
        double r2880594 = r2880592 - r2880593;
        double r2880595 = phi1;
        double r2880596 = phi2;
        double r2880597 = r2880595 + r2880596;
        double r2880598 = 0.5;
        double r2880599 = r2880597 * r2880598;
        double r2880600 = cos(r2880599);
        double r2880601 = r2880594 * r2880600;
        double r2880602 = r2880595 - r2880596;
        double r2880603 = hypot(r2880601, r2880602);
        double r2880604 = R;
        double r2880605 = r2880603 * r2880604;
        return r2880605;
}

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(\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 3.6

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

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

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

Reproduce

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