Average Error: 38.5 → 3.6
Time: 31.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 \mathsf{expm1}\left(\mathsf{log1p}\left(\sqrt[3]{{\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}}\right)\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 \mathsf{expm1}\left(\mathsf{log1p}\left(\sqrt[3]{{\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}}\right)\right), \phi_1 - \phi_2\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r65561 = R;
        double r65562 = lambda1;
        double r65563 = lambda2;
        double r65564 = r65562 - r65563;
        double r65565 = phi1;
        double r65566 = phi2;
        double r65567 = r65565 + r65566;
        double r65568 = 2.0;
        double r65569 = r65567 / r65568;
        double r65570 = cos(r65569);
        double r65571 = r65564 * r65570;
        double r65572 = r65571 * r65571;
        double r65573 = r65565 - r65566;
        double r65574 = r65573 * r65573;
        double r65575 = r65572 + r65574;
        double r65576 = sqrt(r65575);
        double r65577 = r65561 * r65576;
        return r65577;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r65578 = lambda1;
        double r65579 = lambda2;
        double r65580 = r65578 - r65579;
        double r65581 = phi1;
        double r65582 = phi2;
        double r65583 = r65581 + r65582;
        double r65584 = 2.0;
        double r65585 = r65583 / r65584;
        double r65586 = cos(r65585);
        double r65587 = 3.0;
        double r65588 = pow(r65586, r65587);
        double r65589 = cbrt(r65588);
        double r65590 = log1p(r65589);
        double r65591 = expm1(r65590);
        double r65592 = r65580 * r65591;
        double r65593 = r65581 - r65582;
        double r65594 = hypot(r65592, r65593);
        double r65595 = R;
        double r65596 = r65594 * r65595;
        return r65596;
}

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 38.5

    \[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 expm1-log1p-u3.6

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

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

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

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

Reproduce

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