Average Error: 39.1 → 3.7
Time: 29.6s
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 \sqrt[3]{\sqrt[3]{{\left({\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}\right)}^{3}}}, \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 \sqrt[3]{\sqrt[3]{{\left({\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}\right)}^{3}}}, \phi_1 - \phi_2\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r59641 = R;
        double r59642 = lambda1;
        double r59643 = lambda2;
        double r59644 = r59642 - r59643;
        double r59645 = phi1;
        double r59646 = phi2;
        double r59647 = r59645 + r59646;
        double r59648 = 2.0;
        double r59649 = r59647 / r59648;
        double r59650 = cos(r59649);
        double r59651 = r59644 * r59650;
        double r59652 = r59651 * r59651;
        double r59653 = r59645 - r59646;
        double r59654 = r59653 * r59653;
        double r59655 = r59652 + r59654;
        double r59656 = sqrt(r59655);
        double r59657 = r59641 * r59656;
        return r59657;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r59658 = lambda1;
        double r59659 = lambda2;
        double r59660 = r59658 - r59659;
        double r59661 = phi1;
        double r59662 = phi2;
        double r59663 = r59661 + r59662;
        double r59664 = 2.0;
        double r59665 = r59663 / r59664;
        double r59666 = cos(r59665);
        double r59667 = 3.0;
        double r59668 = pow(r59666, r59667);
        double r59669 = pow(r59668, r59667);
        double r59670 = cbrt(r59669);
        double r59671 = cbrt(r59670);
        double r59672 = r59660 * r59671;
        double r59673 = r59661 - r59662;
        double r59674 = hypot(r59672, r59673);
        double r59675 = R;
        double r59676 = r59674 * r59675;
        return r59676;
}

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 39.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. Simplified3.6

    \[\leadsto \color{blue}{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right) \cdot R}\]
  3. Using strategy rm
  4. Applied add-cbrt-cube3.7

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

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \sqrt[3]{\color{blue}{{\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}}}, \phi_1 - \phi_2\right) \cdot R\]
  6. Using strategy rm
  7. Applied add-cbrt-cube3.7

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \sqrt[3]{\color{blue}{\sqrt[3]{\left({\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3} \cdot {\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}\right) \cdot {\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}}}}, \phi_1 - \phi_2\right) \cdot R\]
  8. Simplified3.7

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \sqrt[3]{\sqrt[3]{\color{blue}{{\left({\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}\right)}^{3}}}}, \phi_1 - \phi_2\right) \cdot R\]
  9. Final simplification3.7

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

Reproduce

herbie shell --seed 2019199 +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.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))))