Average Error: 16.8 → 3.4
Time: 14.6s
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(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\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(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r30021 = phi1;
        double r30022 = sin(r30021);
        double r30023 = phi2;
        double r30024 = sin(r30023);
        double r30025 = r30022 * r30024;
        double r30026 = cos(r30021);
        double r30027 = cos(r30023);
        double r30028 = r30026 * r30027;
        double r30029 = lambda1;
        double r30030 = lambda2;
        double r30031 = r30029 - r30030;
        double r30032 = cos(r30031);
        double r30033 = r30028 * r30032;
        double r30034 = r30025 + r30033;
        double r30035 = acos(r30034);
        double r30036 = R;
        double r30037 = r30035 * r30036;
        return r30037;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r30038 = phi1;
        double r30039 = sin(r30038);
        double r30040 = phi2;
        double r30041 = sin(r30040);
        double r30042 = r30039 * r30041;
        double r30043 = cos(r30038);
        double r30044 = cos(r30040);
        double r30045 = r30043 * r30044;
        double r30046 = lambda1;
        double r30047 = cos(r30046);
        double r30048 = lambda2;
        double r30049 = cos(r30048);
        double r30050 = r30047 * r30049;
        double r30051 = sin(r30046);
        double r30052 = -r30048;
        double r30053 = sin(r30052);
        double r30054 = r30051 * r30053;
        double r30055 = r30050 - r30054;
        double r30056 = r30045 * r30055;
        double r30057 = r30042 + r30056;
        double r30058 = acos(r30057);
        double r30059 = exp(r30058);
        double r30060 = log(r30059);
        double r30061 = R;
        double r30062 = r30060 * r30061;
        return r30062;
}

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

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right) \cdot R\]
  4. Applied cos-sum3.4

    \[\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 \left(-\lambda_2\right) - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}\right) \cdot R\]
  5. Simplified3.4

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\cos \lambda_1 \cdot \cos \lambda_2} - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) \cdot R\]
  6. Using strategy rm
  7. Applied add-log-exp3.4

    \[\leadsto \color{blue}{\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 \left(-\lambda_2\right)\right)\right)}\right)} \cdot R\]
  8. Final simplification3.4

    \[\leadsto \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 \left(-\lambda_2\right)\right)\right)}\right) \cdot R\]

Reproduce

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