Average Error: 16.8 → 3.8
Time: 39.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\]
\[\cos^{-1} \left(\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) + \log \left(e^{\sin \phi_2 \cdot \sin \phi_1}\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(\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) + \log \left(e^{\sin \phi_2 \cdot \sin \phi_1}\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1116227 = phi1;
        double r1116228 = sin(r1116227);
        double r1116229 = phi2;
        double r1116230 = sin(r1116229);
        double r1116231 = r1116228 * r1116230;
        double r1116232 = cos(r1116227);
        double r1116233 = cos(r1116229);
        double r1116234 = r1116232 * r1116233;
        double r1116235 = lambda1;
        double r1116236 = lambda2;
        double r1116237 = r1116235 - r1116236;
        double r1116238 = cos(r1116237);
        double r1116239 = r1116234 * r1116238;
        double r1116240 = r1116231 + r1116239;
        double r1116241 = acos(r1116240);
        double r1116242 = R;
        double r1116243 = r1116241 * r1116242;
        return r1116243;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1116244 = phi1;
        double r1116245 = cos(r1116244);
        double r1116246 = phi2;
        double r1116247 = cos(r1116246);
        double r1116248 = r1116245 * r1116247;
        double r1116249 = lambda1;
        double r1116250 = cos(r1116249);
        double r1116251 = lambda2;
        double r1116252 = cos(r1116251);
        double r1116253 = r1116250 * r1116252;
        double r1116254 = sin(r1116249);
        double r1116255 = sin(r1116251);
        double r1116256 = r1116254 * r1116255;
        double r1116257 = r1116253 + r1116256;
        double r1116258 = r1116248 * r1116257;
        double r1116259 = sin(r1116246);
        double r1116260 = sin(r1116244);
        double r1116261 = r1116259 * r1116260;
        double r1116262 = exp(r1116261);
        double r1116263 = log(r1116262);
        double r1116264 = r1116258 + r1116263;
        double r1116265 = acos(r1116264);
        double r1116266 = R;
        double r1116267 = r1116265 * r1116266;
        return r1116267;
}

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.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. Using strategy rm
  5. Applied add-log-exp3.8

    \[\leadsto \cos^{-1} \left(\color{blue}{\log \left(e^{\sin \phi_1 \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\]
  6. Final simplification3.8

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

Reproduce

herbie shell --seed 2019171 
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Spherical law of cosines"
  (* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))