Average Error: 16.7 → 4.0
Time: 55.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\]
\[R \cdot e^{\log \left(\cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 + \log \left(e^{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) + \sin \phi_2 \cdot \sin \phi_1\right)\right)}\]
\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
R \cdot e^{\log \left(\cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 + \log \left(e^{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) + \sin \phi_2 \cdot \sin \phi_1\right)\right)}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1130376 = phi1;
        double r1130377 = sin(r1130376);
        double r1130378 = phi2;
        double r1130379 = sin(r1130378);
        double r1130380 = r1130377 * r1130379;
        double r1130381 = cos(r1130376);
        double r1130382 = cos(r1130378);
        double r1130383 = r1130381 * r1130382;
        double r1130384 = lambda1;
        double r1130385 = lambda2;
        double r1130386 = r1130384 - r1130385;
        double r1130387 = cos(r1130386);
        double r1130388 = r1130383 * r1130387;
        double r1130389 = r1130380 + r1130388;
        double r1130390 = acos(r1130389);
        double r1130391 = R;
        double r1130392 = r1130390 * r1130391;
        return r1130392;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1130393 = R;
        double r1130394 = phi1;
        double r1130395 = cos(r1130394);
        double r1130396 = phi2;
        double r1130397 = cos(r1130396);
        double r1130398 = r1130395 * r1130397;
        double r1130399 = lambda2;
        double r1130400 = cos(r1130399);
        double r1130401 = lambda1;
        double r1130402 = cos(r1130401);
        double r1130403 = r1130400 * r1130402;
        double r1130404 = sin(r1130399);
        double r1130405 = sin(r1130401);
        double r1130406 = r1130404 * r1130405;
        double r1130407 = exp(r1130406);
        double r1130408 = log(r1130407);
        double r1130409 = r1130403 + r1130408;
        double r1130410 = r1130398 * r1130409;
        double r1130411 = sin(r1130396);
        double r1130412 = sin(r1130394);
        double r1130413 = r1130411 * r1130412;
        double r1130414 = r1130410 + r1130413;
        double r1130415 = acos(r1130414);
        double r1130416 = log(r1130415);
        double r1130417 = exp(r1130416);
        double r1130418 = r1130393 * r1130417;
        return r1130418;
}

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

    \[\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. Using strategy rm
  5. Applied add-log-exp4.0

    \[\leadsto \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 + \color{blue}{\log \left(e^{\sin \lambda_1 \cdot \sin \lambda_2}\right)}\right)\right) \cdot R\]
  6. Using strategy rm
  7. Applied add-exp-log4.0

    \[\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 + \log \left(e^{\sin \lambda_1 \cdot \sin \lambda_2}\right)\right)\right)\right)}} \cdot R\]
  8. Final simplification4.0

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

Reproduce

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