Average Error: 17.0 → 3.9
Time: 14.8s
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\]
\[e^{\log \left(\log \left(e^{\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \log \left(e^{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right)\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
e^{\log \left(\log \left(e^{\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \log \left(e^{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right)\right)\right)}\right)\right)} \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r27323 = phi1;
        double r27324 = sin(r27323);
        double r27325 = phi2;
        double r27326 = sin(r27325);
        double r27327 = r27324 * r27326;
        double r27328 = cos(r27323);
        double r27329 = cos(r27325);
        double r27330 = r27328 * r27329;
        double r27331 = lambda1;
        double r27332 = lambda2;
        double r27333 = r27331 - r27332;
        double r27334 = cos(r27333);
        double r27335 = r27330 * r27334;
        double r27336 = r27327 + r27335;
        double r27337 = acos(r27336);
        double r27338 = R;
        double r27339 = r27337 * r27338;
        return r27339;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r27340 = phi1;
        double r27341 = sin(r27340);
        double r27342 = phi2;
        double r27343 = sin(r27342);
        double r27344 = r27341 * r27343;
        double r27345 = cos(r27340);
        double r27346 = cos(r27342);
        double r27347 = r27345 * r27346;
        double r27348 = lambda1;
        double r27349 = cos(r27348);
        double r27350 = lambda2;
        double r27351 = cos(r27350);
        double r27352 = r27349 * r27351;
        double r27353 = r27347 * r27352;
        double r27354 = sin(r27348);
        double r27355 = sin(r27350);
        double r27356 = r27354 * r27355;
        double r27357 = r27347 * r27356;
        double r27358 = exp(r27357);
        double r27359 = log(r27358);
        double r27360 = r27353 + r27359;
        double r27361 = r27344 + r27360;
        double r27362 = acos(r27361);
        double r27363 = exp(r27362);
        double r27364 = log(r27363);
        double r27365 = log(r27364);
        double r27366 = exp(r27365);
        double r27367 = R;
        double r27368 = r27366 * r27367;
        return r27368;
}

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 17.0

    \[\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. Applied distribute-lft-in3.8

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}\right) \cdot R\]
  5. Using strategy rm
  6. Applied add-log-exp3.8

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \color{blue}{\log \left(e^{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right)}\right)\right) \cdot R\]
  7. Using strategy rm
  8. Applied add-exp-log3.8

    \[\leadsto \color{blue}{e^{\log \left(\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \log \left(e^{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right)\right)\right)\right)}} \cdot R\]
  9. Using strategy rm
  10. Applied add-log-exp3.9

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

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

Reproduce

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