Average Error: 37.6 → 3.8
Time: 25.2s
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)}\]
\[R \cdot \mathsf{hypot}\left(\sqrt[3]{\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)} \cdot \left(\lambda_1 - \lambda_2\right), \phi_1 - \phi_2\right)\]
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)}
R \cdot \mathsf{hypot}\left(\sqrt[3]{\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)} \cdot \left(\lambda_1 - \lambda_2\right), \phi_1 - \phi_2\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1526142 = R;
        double r1526143 = lambda1;
        double r1526144 = lambda2;
        double r1526145 = r1526143 - r1526144;
        double r1526146 = phi1;
        double r1526147 = phi2;
        double r1526148 = r1526146 + r1526147;
        double r1526149 = 2.0;
        double r1526150 = r1526148 / r1526149;
        double r1526151 = cos(r1526150);
        double r1526152 = r1526145 * r1526151;
        double r1526153 = r1526152 * r1526152;
        double r1526154 = r1526146 - r1526147;
        double r1526155 = r1526154 * r1526154;
        double r1526156 = r1526153 + r1526155;
        double r1526157 = sqrt(r1526156);
        double r1526158 = r1526142 * r1526157;
        return r1526158;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1526159 = R;
        double r1526160 = phi2;
        double r1526161 = phi1;
        double r1526162 = r1526160 + r1526161;
        double r1526163 = 2.0;
        double r1526164 = r1526162 / r1526163;
        double r1526165 = cos(r1526164);
        double r1526166 = r1526165 * r1526165;
        double r1526167 = r1526166 * r1526165;
        double r1526168 = cbrt(r1526167);
        double r1526169 = lambda1;
        double r1526170 = lambda2;
        double r1526171 = r1526169 - r1526170;
        double r1526172 = r1526168 * r1526171;
        double r1526173 = r1526161 - r1526160;
        double r1526174 = hypot(r1526172, r1526173);
        double r1526175 = r1526159 * r1526174;
        return r1526175;
}

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

    \[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(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right), \phi_1 - \phi_2\right) \cdot R}\]
  3. Using strategy rm
  4. Applied add-cbrt-cube3.8

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

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

Reproduce

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