Average Error: 17.0 → 3.9
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(\sin \lambda_1 \cdot \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \sin \lambda_2\right)\right) + \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \lambda_1 \cdot \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \lambda_2\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(\sin \lambda_1 \cdot \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \sin \lambda_2\right)\right) + \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \lambda_1 \cdot \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \cos \lambda_2\right)\right)\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25682 = phi1;
        double r25683 = sin(r25682);
        double r25684 = phi2;
        double r25685 = sin(r25684);
        double r25686 = r25683 * r25685;
        double r25687 = cos(r25682);
        double r25688 = cos(r25684);
        double r25689 = r25687 * r25688;
        double r25690 = lambda1;
        double r25691 = lambda2;
        double r25692 = r25690 - r25691;
        double r25693 = cos(r25692);
        double r25694 = r25689 * r25693;
        double r25695 = r25686 + r25694;
        double r25696 = acos(r25695);
        double r25697 = R;
        double r25698 = r25696 * r25697;
        return r25698;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25699 = lambda1;
        double r25700 = sin(r25699);
        double r25701 = phi1;
        double r25702 = cos(r25701);
        double r25703 = phi2;
        double r25704 = cos(r25703);
        double r25705 = lambda2;
        double r25706 = sin(r25705);
        double r25707 = r25704 * r25706;
        double r25708 = r25702 * r25707;
        double r25709 = r25700 * r25708;
        double r25710 = sin(r25701);
        double r25711 = sin(r25703);
        double r25712 = r25710 * r25711;
        double r25713 = cos(r25699);
        double r25714 = cos(r25705);
        double r25715 = r25704 * r25714;
        double r25716 = r25702 * r25715;
        double r25717 = r25713 * r25716;
        double r25718 = r25712 + r25717;
        double r25719 = r25709 + r25718;
        double r25720 = acos(r25719);
        double r25721 = R;
        double r25722 = r25720 * r25721;
        return r25722;
}

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.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. Applied distribute-lft-in3.9

    \[\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 associate-*l*3.9

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

    \[\leadsto \color{blue}{\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) + \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right)\right)}\right)} \cdot R\]
  9. Using strategy rm
  10. Applied pow13.9

    \[\leadsto \log \color{blue}{\left({\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) + \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right)\right)}\right)}^{1}\right)} \cdot R\]
  11. Applied log-pow3.9

    \[\leadsto \color{blue}{\left(1 \cdot \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) + \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right)\right)}\right)\right)} \cdot R\]
  12. Applied associate-*l*3.9

    \[\leadsto \color{blue}{1 \cdot \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) + \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right)\right)}\right) \cdot R\right)}\]
  13. Simplified3.9

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

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

Reproduce

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