Average Error: 16.7 → 3.6
Time: 46.3s
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_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) \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_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) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r499524 = phi1;
        double r499525 = sin(r499524);
        double r499526 = phi2;
        double r499527 = sin(r499526);
        double r499528 = r499525 * r499527;
        double r499529 = cos(r499524);
        double r499530 = cos(r499526);
        double r499531 = r499529 * r499530;
        double r499532 = lambda1;
        double r499533 = lambda2;
        double r499534 = r499532 - r499533;
        double r499535 = cos(r499534);
        double r499536 = r499531 * r499535;
        double r499537 = r499528 + r499536;
        double r499538 = acos(r499537);
        double r499539 = R;
        double r499540 = r499538 * r499539;
        return r499540;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r499541 = phi1;
        double r499542 = cos(r499541);
        double r499543 = phi2;
        double r499544 = cos(r499543);
        double r499545 = r499542 * r499544;
        double r499546 = lambda2;
        double r499547 = cos(r499546);
        double r499548 = lambda1;
        double r499549 = cos(r499548);
        double r499550 = r499547 * r499549;
        double r499551 = sin(r499546);
        double r499552 = sin(r499548);
        double r499553 = r499551 * r499552;
        double r499554 = exp(r499553);
        double r499555 = log(r499554);
        double r499556 = r499550 + r499555;
        double r499557 = r499545 * r499556;
        double r499558 = sin(r499543);
        double r499559 = sin(r499541);
        double r499560 = r499558 * r499559;
        double r499561 = r499557 + r499560;
        double r499562 = acos(r499561);
        double r499563 = R;
        double r499564 = r499562 * r499563;
        return r499564;
}

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

    \[\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.6

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

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

Reproduce

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