Average Error: 16.9 → 3.9
Time: 24.0s
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 + \sin \lambda_1 \cdot \sin \lambda_2\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 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25657 = phi1;
        double r25658 = sin(r25657);
        double r25659 = phi2;
        double r25660 = sin(r25659);
        double r25661 = r25658 * r25660;
        double r25662 = cos(r25657);
        double r25663 = cos(r25659);
        double r25664 = r25662 * r25663;
        double r25665 = lambda1;
        double r25666 = lambda2;
        double r25667 = r25665 - r25666;
        double r25668 = cos(r25667);
        double r25669 = r25664 * r25668;
        double r25670 = r25661 + r25669;
        double r25671 = acos(r25670);
        double r25672 = R;
        double r25673 = r25671 * r25672;
        return r25673;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25674 = phi1;
        double r25675 = sin(r25674);
        double r25676 = phi2;
        double r25677 = sin(r25676);
        double r25678 = r25675 * r25677;
        double r25679 = 3.0;
        double r25680 = pow(r25678, r25679);
        double r25681 = cbrt(r25680);
        double r25682 = cos(r25674);
        double r25683 = cos(r25676);
        double r25684 = r25682 * r25683;
        double r25685 = lambda1;
        double r25686 = cos(r25685);
        double r25687 = lambda2;
        double r25688 = cos(r25687);
        double r25689 = r25686 * r25688;
        double r25690 = sin(r25685);
        double r25691 = sin(r25687);
        double r25692 = r25690 * r25691;
        double r25693 = r25689 + r25692;
        double r25694 = r25684 * r25693;
        double r25695 = r25681 + r25694;
        double r25696 = acos(r25695);
        double r25697 = R;
        double r25698 = r25696 * r25697;
        return r25698;
}

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.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-cbrt-cube3.9

    \[\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 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R\]
  6. 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 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R\]
  7. Applied cbrt-unprod3.9

    \[\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 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R\]
  8. Simplified3.9

    \[\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 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R\]
  9. Final simplification3.9

    \[\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 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot R\]

Reproduce

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