Average Error: 17.2 → 3.9
Time: 14.5s
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(\log \left(e^{\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 \sin \lambda_2\right)\right) - 1}\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(\log \left(e^{\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 \sin \lambda_2\right)\right) - 1}\right)\right)} \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r23517 = phi1;
        double r23518 = sin(r23517);
        double r23519 = phi2;
        double r23520 = sin(r23519);
        double r23521 = r23518 * r23520;
        double r23522 = cos(r23517);
        double r23523 = cos(r23519);
        double r23524 = r23522 * r23523;
        double r23525 = lambda1;
        double r23526 = lambda2;
        double r23527 = r23525 - r23526;
        double r23528 = cos(r23527);
        double r23529 = r23524 * r23528;
        double r23530 = r23521 + r23529;
        double r23531 = acos(r23530);
        double r23532 = R;
        double r23533 = r23531 * r23532;
        return r23533;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r23534 = phi1;
        double r23535 = sin(r23534);
        double r23536 = phi2;
        double r23537 = sin(r23536);
        double r23538 = r23535 * r23537;
        double r23539 = cos(r23534);
        double r23540 = cos(r23536);
        double r23541 = r23539 * r23540;
        double r23542 = lambda1;
        double r23543 = cos(r23542);
        double r23544 = lambda2;
        double r23545 = cos(r23544);
        double r23546 = r23543 * r23545;
        double r23547 = sin(r23542);
        double r23548 = sin(r23544);
        double r23549 = r23547 * r23548;
        double r23550 = r23546 + r23549;
        double r23551 = r23541 * r23550;
        double r23552 = r23538 + r23551;
        double r23553 = acos(r23552);
        double r23554 = 1.0;
        double r23555 = r23553 - r23554;
        double r23556 = exp(r23555);
        double r23557 = log(r23556);
        double r23558 = log1p(r23557);
        double r23559 = exp(r23558);
        double r23560 = R;
        double r23561 = r23559 * r23560;
        return r23561;
}

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.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 \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R\]
  4. Using strategy rm
  5. Applied add-exp-log3.9

    \[\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 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right)}} \cdot R\]
  6. Using strategy rm
  7. Applied log1p-expm1-u3.9

    \[\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 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right)\right)\right)}} \cdot R\]
  8. Using strategy rm
  9. Applied add-log-exp3.9

    \[\leadsto e^{\mathsf{log1p}\left(\color{blue}{\log \left(e^{\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 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right)\right)}\right)}\right)} \cdot R\]
  10. Simplified3.9

    \[\leadsto e^{\mathsf{log1p}\left(\log \color{blue}{\left(e^{\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 \sin \lambda_2\right)\right) - 1}\right)}\right)} \cdot R\]
  11. Final simplification3.9

    \[\leadsto e^{\mathsf{log1p}\left(\log \left(e^{\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 \sin \lambda_2\right)\right) - 1}\right)\right)} \cdot R\]

Reproduce

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