Average Error: 17.2 → 3.7
Time: 14.6s
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^{\mathsf{log1p}\left(\mathsf{expm1}\left(\log \left(\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sqrt[3]{{\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}}\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^{\mathsf{log1p}\left(\mathsf{expm1}\left(\log \left(\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sqrt[3]{{\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}}\right)\right)\right)\right)\right)} \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r24344 = phi1;
        double r24345 = sin(r24344);
        double r24346 = phi2;
        double r24347 = sin(r24346);
        double r24348 = r24345 * r24347;
        double r24349 = cos(r24344);
        double r24350 = cos(r24346);
        double r24351 = r24349 * r24350;
        double r24352 = lambda1;
        double r24353 = lambda2;
        double r24354 = r24352 - r24353;
        double r24355 = cos(r24354);
        double r24356 = r24351 * r24355;
        double r24357 = r24348 + r24356;
        double r24358 = acos(r24357);
        double r24359 = R;
        double r24360 = r24358 * r24359;
        return r24360;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r24361 = phi1;
        double r24362 = sin(r24361);
        double r24363 = phi2;
        double r24364 = sin(r24363);
        double r24365 = r24362 * r24364;
        double r24366 = cos(r24361);
        double r24367 = cos(r24363);
        double r24368 = r24366 * r24367;
        double r24369 = lambda1;
        double r24370 = cos(r24369);
        double r24371 = lambda2;
        double r24372 = cos(r24371);
        double r24373 = r24370 * r24372;
        double r24374 = sin(r24369);
        double r24375 = sin(r24371);
        double r24376 = r24374 * r24375;
        double r24377 = 3.0;
        double r24378 = pow(r24376, r24377);
        double r24379 = cbrt(r24378);
        double r24380 = r24373 + r24379;
        double r24381 = r24368 * r24380;
        double r24382 = r24365 + r24381;
        double r24383 = acos(r24382);
        double r24384 = log(r24383);
        double r24385 = expm1(r24384);
        double r24386 = log1p(r24385);
        double r24387 = exp(r24386);
        double r24388 = R;
        double r24389 = r24387 * r24388;
        return r24389;
}

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

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

    \[\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 add-cbrt-cube3.7

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \color{blue}{\sqrt[3]{\left(\sin \lambda_2 \cdot \sin \lambda_2\right) \cdot \sin \lambda_2}}\right)\right) \cdot R\]
  6. Applied add-cbrt-cube3.7

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \color{blue}{\sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_1\right) \cdot \sin \lambda_1}} \cdot \sqrt[3]{\left(\sin \lambda_2 \cdot \sin \lambda_2\right) \cdot \sin \lambda_2}\right)\right) \cdot R\]
  7. Applied cbrt-unprod3.7

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \color{blue}{\sqrt[3]{\left(\left(\sin \lambda_1 \cdot \sin \lambda_1\right) \cdot \sin \lambda_1\right) \cdot \left(\left(\sin \lambda_2 \cdot \sin \lambda_2\right) \cdot \sin \lambda_2\right)}}\right)\right) \cdot R\]
  8. Simplified3.7

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

    \[\leadsto \color{blue}{e^{\log \left(\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sqrt[3]{{\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}}\right)\right)\right)}} \cdot R\]
  11. Using strategy rm
  12. Applied log1p-expm1-u3.7

    \[\leadsto e^{\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\log \left(\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sqrt[3]{{\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}}\right)\right)\right)\right)\right)}} \cdot R\]
  13. Final simplification3.7

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

Reproduce

herbie shell --seed 2019354 +o rules:numerics
(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))