Average Error: 16.7 → 3.9
Time: 55.1s
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(\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\]
\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(\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
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r21334 = phi1;
        double r21335 = sin(r21334);
        double r21336 = phi2;
        double r21337 = sin(r21336);
        double r21338 = r21335 * r21337;
        double r21339 = cos(r21334);
        double r21340 = cos(r21336);
        double r21341 = r21339 * r21340;
        double r21342 = lambda1;
        double r21343 = lambda2;
        double r21344 = r21342 - r21343;
        double r21345 = cos(r21344);
        double r21346 = r21341 * r21345;
        double r21347 = r21338 + r21346;
        double r21348 = acos(r21347);
        double r21349 = R;
        double r21350 = r21348 * r21349;
        return r21350;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r21351 = phi1;
        double r21352 = sin(r21351);
        double r21353 = phi2;
        double r21354 = sin(r21353);
        double r21355 = r21352 * r21354;
        double r21356 = cos(r21351);
        double r21357 = cos(r21353);
        double r21358 = r21356 * r21357;
        double r21359 = lambda1;
        double r21360 = cos(r21359);
        double r21361 = lambda2;
        double r21362 = cos(r21361);
        double r21363 = r21360 * r21362;
        double r21364 = sin(r21359);
        double r21365 = sin(r21361);
        double r21366 = r21364 * r21365;
        double r21367 = r21363 + r21366;
        double r21368 = r21358 * r21367;
        double r21369 = r21355 + r21368;
        double r21370 = acos(r21369);
        double r21371 = log(r21370);
        double r21372 = exp(r21371);
        double r21373 = R;
        double r21374 = r21372 * r21373;
        return r21374;
}

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-exp-log3.9

    \[\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. Final simplification3.9

    \[\leadsto 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\]

Reproduce

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