Average Error: 16.8 → 3.5
Time: 15.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\]
\[e^{\log \left(\log \left(1 \cdot 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)}\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^{\log \left(\log \left(1 \cdot 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)}\right)\right)} \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r26805 = phi1;
        double r26806 = sin(r26805);
        double r26807 = phi2;
        double r26808 = sin(r26807);
        double r26809 = r26806 * r26808;
        double r26810 = cos(r26805);
        double r26811 = cos(r26807);
        double r26812 = r26810 * r26811;
        double r26813 = lambda1;
        double r26814 = lambda2;
        double r26815 = r26813 - r26814;
        double r26816 = cos(r26815);
        double r26817 = r26812 * r26816;
        double r26818 = r26809 + r26817;
        double r26819 = acos(r26818);
        double r26820 = R;
        double r26821 = r26819 * r26820;
        return r26821;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r26822 = 1.0;
        double r26823 = phi1;
        double r26824 = sin(r26823);
        double r26825 = phi2;
        double r26826 = sin(r26825);
        double r26827 = r26824 * r26826;
        double r26828 = cos(r26823);
        double r26829 = cos(r26825);
        double r26830 = r26828 * r26829;
        double r26831 = lambda1;
        double r26832 = cos(r26831);
        double r26833 = lambda2;
        double r26834 = cos(r26833);
        double r26835 = r26832 * r26834;
        double r26836 = sin(r26831);
        double r26837 = sin(r26833);
        double r26838 = r26836 * r26837;
        double r26839 = r26835 + r26838;
        double r26840 = r26830 * r26839;
        double r26841 = r26827 + r26840;
        double r26842 = acos(r26841);
        double r26843 = exp(r26842);
        double r26844 = r26822 * r26843;
        double r26845 = log(r26844);
        double r26846 = log(r26845);
        double r26847 = exp(r26846);
        double r26848 = R;
        double r26849 = r26847 * r26848;
        return r26849;
}

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

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

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

    \[\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 add-log-exp3.5

    \[\leadsto e^{\log \color{blue}{\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)}\right)\right)}} \cdot R\]
  8. Using strategy rm
  9. Applied *-un-lft-identity3.5

    \[\leadsto e^{\log \left(\log \color{blue}{\left(1 \cdot 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)}\right)}\right)} \cdot R\]
  10. Final simplification3.5

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

Reproduce

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