Average Error: 16.9 → 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\]
\[\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) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot \sqrt[3]{\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
\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) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot \sqrt[3]{\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 r26030 = phi1;
        double r26031 = sin(r26030);
        double r26032 = phi2;
        double r26033 = sin(r26032);
        double r26034 = r26031 * r26033;
        double r26035 = cos(r26030);
        double r26036 = cos(r26032);
        double r26037 = r26035 * r26036;
        double r26038 = lambda1;
        double r26039 = lambda2;
        double r26040 = r26038 - r26039;
        double r26041 = cos(r26040);
        double r26042 = r26037 * r26041;
        double r26043 = r26034 + r26042;
        double r26044 = acos(r26043);
        double r26045 = R;
        double r26046 = r26044 * r26045;
        return r26046;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r26047 = phi1;
        double r26048 = sin(r26047);
        double r26049 = phi2;
        double r26050 = sin(r26049);
        double r26051 = r26048 * r26050;
        double r26052 = cos(r26047);
        double r26053 = cos(r26049);
        double r26054 = r26052 * r26053;
        double r26055 = lambda1;
        double r26056 = cos(r26055);
        double r26057 = lambda2;
        double r26058 = cos(r26057);
        double r26059 = r26056 * r26058;
        double r26060 = r26054 * r26059;
        double r26061 = sin(r26055);
        double r26062 = sin(r26057);
        double r26063 = r26061 * r26062;
        double r26064 = cbrt(r26063);
        double r26065 = r26064 * r26064;
        double r26066 = r26065 * r26064;
        double r26067 = r26054 * r26066;
        double r26068 = r26060 + r26067;
        double r26069 = r26051 + r26068;
        double r26070 = acos(r26069);
        double r26071 = exp(r26070);
        double r26072 = log(r26071);
        double r26073 = R;
        double r26074 = r26072 * r26073;
        return r26074;
}

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

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

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

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

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

    \[\leadsto \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) + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right)\right)\right)}\right) \cdot R\]

Reproduce

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