Average Error: 16.8 → 3.9
Time: 1.0m
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(\sin \phi_2 \cdot \sin \phi_1 + \frac{\left(\cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)}{\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_1 \cdot \sin \lambda_2}\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(\sin \phi_2 \cdot \sin \phi_1 + \frac{\left(\cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right)}{\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1654384 = phi1;
        double r1654385 = sin(r1654384);
        double r1654386 = phi2;
        double r1654387 = sin(r1654386);
        double r1654388 = r1654385 * r1654387;
        double r1654389 = cos(r1654384);
        double r1654390 = cos(r1654386);
        double r1654391 = r1654389 * r1654390;
        double r1654392 = lambda1;
        double r1654393 = lambda2;
        double r1654394 = r1654392 - r1654393;
        double r1654395 = cos(r1654394);
        double r1654396 = r1654391 * r1654395;
        double r1654397 = r1654388 + r1654396;
        double r1654398 = acos(r1654397);
        double r1654399 = R;
        double r1654400 = r1654398 * r1654399;
        return r1654400;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1654401 = phi2;
        double r1654402 = sin(r1654401);
        double r1654403 = phi1;
        double r1654404 = sin(r1654403);
        double r1654405 = r1654402 * r1654404;
        double r1654406 = lambda1;
        double r1654407 = cos(r1654406);
        double r1654408 = lambda2;
        double r1654409 = cos(r1654408);
        double r1654410 = r1654409 * r1654407;
        double r1654411 = r1654409 * r1654410;
        double r1654412 = r1654407 * r1654411;
        double r1654413 = sin(r1654406);
        double r1654414 = sin(r1654408);
        double r1654415 = r1654413 * r1654414;
        double r1654416 = r1654415 * r1654415;
        double r1654417 = r1654412 - r1654416;
        double r1654418 = cos(r1654403);
        double r1654419 = cos(r1654401);
        double r1654420 = r1654418 * r1654419;
        double r1654421 = r1654417 * r1654420;
        double r1654422 = r1654410 - r1654415;
        double r1654423 = r1654421 / r1654422;
        double r1654424 = r1654405 + r1654423;
        double r1654425 = acos(r1654424);
        double r1654426 = R;
        double r1654427 = r1654425 * r1654426;
        return r1654427;
}

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.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 flip-+3.9

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\frac{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}}\right) \cdot R\]
  6. Applied associate-*r/3.9

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\frac{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}}\right) \cdot R\]
  7. Using strategy rm
  8. Applied associate-*l*3.9

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \frac{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right)} - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot R\]
  9. Final simplification3.9

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

Reproduce

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