Average Error: 37.1 → 3.7
Time: 44.0s
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(\frac{\phi_2 + \phi_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(\frac{\phi_2 + \phi_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 r11941164 = R;
        double r11941165 = lambda1;
        double r11941166 = lambda2;
        double r11941167 = r11941165 - r11941166;
        double r11941168 = phi1;
        double r11941169 = phi2;
        double r11941170 = r11941168 + r11941169;
        double r11941171 = 2.0;
        double r11941172 = r11941170 / r11941171;
        double r11941173 = cos(r11941172);
        double r11941174 = r11941167 * r11941173;
        double r11941175 = r11941174 * r11941174;
        double r11941176 = r11941168 - r11941169;
        double r11941177 = r11941176 * r11941176;
        double r11941178 = r11941175 + r11941177;
        double r11941179 = sqrt(r11941178);
        double r11941180 = r11941164 * r11941179;
        return r11941180;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r11941181 = lambda1;
        double r11941182 = lambda2;
        double r11941183 = r11941181 - r11941182;
        double r11941184 = phi2;
        double r11941185 = phi1;
        double r11941186 = r11941184 + r11941185;
        double r11941187 = 2.0;
        double r11941188 = r11941186 / r11941187;
        double r11941189 = cos(r11941188);
        double r11941190 = r11941183 * r11941189;
        double r11941191 = r11941185 - r11941184;
        double r11941192 = hypot(r11941190, r11941191);
        double r11941193 = R;
        double r11941194 = r11941192 * r11941193;
        return r11941194;
}

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

    \[\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. Final simplification3.7

    \[\leadsto \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\]

Reproduce

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