Average Error: 16.9 → 3.9
Time: 1.1m
Precision: 64
\[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R\]
\[\left(\frac{\pi}{2} - \sin^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right)\right) \cdot R\]
\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R
\left(\frac{\pi}{2} - \sin^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1933269 = phi1;
        double r1933270 = sin(r1933269);
        double r1933271 = phi2;
        double r1933272 = sin(r1933271);
        double r1933273 = r1933270 * r1933272;
        double r1933274 = cos(r1933269);
        double r1933275 = cos(r1933271);
        double r1933276 = r1933274 * r1933275;
        double r1933277 = lambda1;
        double r1933278 = lambda2;
        double r1933279 = r1933277 - r1933278;
        double r1933280 = cos(r1933279);
        double r1933281 = r1933276 * r1933280;
        double r1933282 = r1933273 + r1933281;
        double r1933283 = acos(r1933282);
        double r1933284 = R;
        double r1933285 = r1933283 * r1933284;
        return r1933285;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1933286 = atan2(1.0, 0.0);
        double r1933287 = 2.0;
        double r1933288 = r1933286 / r1933287;
        double r1933289 = phi2;
        double r1933290 = sin(r1933289);
        double r1933291 = phi1;
        double r1933292 = sin(r1933291);
        double r1933293 = r1933290 * r1933292;
        double r1933294 = cos(r1933289);
        double r1933295 = cos(r1933291);
        double r1933296 = r1933294 * r1933295;
        double r1933297 = lambda2;
        double r1933298 = sin(r1933297);
        double r1933299 = lambda1;
        double r1933300 = sin(r1933299);
        double r1933301 = r1933298 * r1933300;
        double r1933302 = r1933296 * r1933301;
        double r1933303 = cos(r1933297);
        double r1933304 = cos(r1933299);
        double r1933305 = r1933303 * r1933304;
        double r1933306 = r1933296 * r1933305;
        double r1933307 = r1933302 + r1933306;
        double r1933308 = r1933293 + r1933307;
        double r1933309 = asin(r1933308);
        double r1933310 = r1933288 - r1933309;
        double r1933311 = R;
        double r1933312 = r1933310 * r1933311;
        return r1933312;
}

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 16.9

    \[\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right) \cdot R\]
  2. Using strategy rm
  3. Applied cos-diff3.8

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R\]
  4. Using strategy rm
  5. Applied distribute-rgt-in3.8

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)}\right) \cdot R\]
  6. Using strategy rm
  7. Applied acos-asin3.9

    \[\leadsto \color{blue}{\left(\frac{\pi}{2} - \sin^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)\right)\right)\right)} \cdot R\]
  8. Final simplification3.9

    \[\leadsto \left(\frac{\pi}{2} - \sin^{-1} \left(\sin \phi_2 \cdot \sin \phi_1 + \left(\left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) + \left(\cos \phi_2 \cdot \cos \phi_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right)\right) \cdot R\]

Reproduce

herbie shell --seed 2019121 
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Spherical law of cosines"
  (* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))