Average Error: 16.9 → 4.0
Time: 14.4s
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\]
\[\cos^{-1} \left(\sqrt[3]{{\left(\sin \phi_1 \cdot \sin \phi_2\right)}^{3}} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\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
\cos^{-1} \left(\sqrt[3]{{\left(\sin \phi_1 \cdot \sin \phi_2\right)}^{3}} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r22319 = phi1;
        double r22320 = sin(r22319);
        double r22321 = phi2;
        double r22322 = sin(r22321);
        double r22323 = r22320 * r22322;
        double r22324 = cos(r22319);
        double r22325 = cos(r22321);
        double r22326 = r22324 * r22325;
        double r22327 = lambda1;
        double r22328 = lambda2;
        double r22329 = r22327 - r22328;
        double r22330 = cos(r22329);
        double r22331 = r22326 * r22330;
        double r22332 = r22323 + r22331;
        double r22333 = acos(r22332);
        double r22334 = R;
        double r22335 = r22333 * r22334;
        return r22335;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r22336 = phi1;
        double r22337 = sin(r22336);
        double r22338 = phi2;
        double r22339 = sin(r22338);
        double r22340 = r22337 * r22339;
        double r22341 = 3.0;
        double r22342 = pow(r22340, r22341);
        double r22343 = cbrt(r22342);
        double r22344 = cos(r22336);
        double r22345 = cos(r22338);
        double r22346 = r22344 * r22345;
        double r22347 = lambda1;
        double r22348 = cos(r22347);
        double r22349 = lambda2;
        double r22350 = cos(r22349);
        double r22351 = r22348 * r22350;
        double r22352 = sin(r22347);
        double r22353 = -r22349;
        double r22354 = sin(r22353);
        double r22355 = r22352 * r22354;
        double r22356 = expm1(r22355);
        double r22357 = log1p(r22356);
        double r22358 = r22351 - r22357;
        double r22359 = r22346 * r22358;
        double r22360 = r22343 + r22359;
        double r22361 = acos(r22360);
        double r22362 = R;
        double r22363 = r22361 * r22362;
        return r22363;
}

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 sub-neg16.9

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right) \cdot R\]
  4. Applied cos-sum3.9

    \[\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 \left(-\lambda_2\right) - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}\right) \cdot R\]
  5. Simplified3.9

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

    \[\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}{\mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}\right)\right) \cdot R\]
  8. Using strategy rm
  9. Applied add-cbrt-cube4.0

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \color{blue}{\sqrt[3]{\left(\sin \phi_2 \cdot \sin \phi_2\right) \cdot \sin \phi_2}} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right) \cdot R\]
  10. Applied add-cbrt-cube4.0

    \[\leadsto \cos^{-1} \left(\color{blue}{\sqrt[3]{\left(\sin \phi_1 \cdot \sin \phi_1\right) \cdot \sin \phi_1}} \cdot \sqrt[3]{\left(\sin \phi_2 \cdot \sin \phi_2\right) \cdot \sin \phi_2} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right) \cdot R\]
  11. Applied cbrt-unprod4.0

    \[\leadsto \cos^{-1} \left(\color{blue}{\sqrt[3]{\left(\left(\sin \phi_1 \cdot \sin \phi_1\right) \cdot \sin \phi_1\right) \cdot \left(\left(\sin \phi_2 \cdot \sin \phi_2\right) \cdot \sin \phi_2\right)}} + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \mathsf{log1p}\left(\mathsf{expm1}\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right) \cdot R\]
  12. Simplified4.0

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

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

Reproduce

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