Average Error: 37.2 → 0.1
Time: 25.3s
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 \mathsf{expm1}\left(\left(\mathsf{log1p}\left(\left(\cos \left(\phi_2 \cdot \frac{1}{2}\right) \cdot \cos \left(\phi_1 \cdot \frac{1}{2}\right) - \sin \left(\phi_1 \cdot \frac{1}{2}\right) \cdot \sin \left(\phi_2 \cdot \frac{1}{2}\right)\right)\right)\right)\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 \mathsf{expm1}\left(\left(\mathsf{log1p}\left(\left(\cos \left(\phi_2 \cdot \frac{1}{2}\right) \cdot \cos \left(\phi_1 \cdot \frac{1}{2}\right) - \sin \left(\phi_1 \cdot \frac{1}{2}\right) \cdot \sin \left(\phi_2 \cdot \frac{1}{2}\right)\right)\right)\right)\right)\right), \left(\phi_1 - \phi_2\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2976656 = R;
        double r2976657 = lambda1;
        double r2976658 = lambda2;
        double r2976659 = r2976657 - r2976658;
        double r2976660 = phi1;
        double r2976661 = phi2;
        double r2976662 = r2976660 + r2976661;
        double r2976663 = 2.0;
        double r2976664 = r2976662 / r2976663;
        double r2976665 = cos(r2976664);
        double r2976666 = r2976659 * r2976665;
        double r2976667 = r2976666 * r2976666;
        double r2976668 = r2976660 - r2976661;
        double r2976669 = r2976668 * r2976668;
        double r2976670 = r2976667 + r2976669;
        double r2976671 = sqrt(r2976670);
        double r2976672 = r2976656 * r2976671;
        return r2976672;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2976673 = lambda1;
        double r2976674 = lambda2;
        double r2976675 = r2976673 - r2976674;
        double r2976676 = phi2;
        double r2976677 = 0.5;
        double r2976678 = r2976676 * r2976677;
        double r2976679 = cos(r2976678);
        double r2976680 = phi1;
        double r2976681 = r2976680 * r2976677;
        double r2976682 = cos(r2976681);
        double r2976683 = r2976679 * r2976682;
        double r2976684 = sin(r2976681);
        double r2976685 = sin(r2976678);
        double r2976686 = r2976684 * r2976685;
        double r2976687 = r2976683 - r2976686;
        double r2976688 = log1p(r2976687);
        double r2976689 = expm1(r2976688);
        double r2976690 = r2976675 * r2976689;
        double r2976691 = r2976680 - r2976676;
        double r2976692 = hypot(r2976690, r2976691);
        double r2976693 = R;
        double r2976694 = r2976692 * r2976693;
        return r2976694;
}

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

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

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

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

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

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

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

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

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

Reproduce

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