Average Error: 16.8 → 3.9
Time: 47.8s
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\]
\[\log \left(e^{\cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\right) + \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
\log \left(e^{\cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\right) + \sin \phi_2 \cdot \sin \phi_1\right)}\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r969537 = phi1;
        double r969538 = sin(r969537);
        double r969539 = phi2;
        double r969540 = sin(r969539);
        double r969541 = r969538 * r969540;
        double r969542 = cos(r969537);
        double r969543 = cos(r969539);
        double r969544 = r969542 * r969543;
        double r969545 = lambda1;
        double r969546 = lambda2;
        double r969547 = r969545 - r969546;
        double r969548 = cos(r969547);
        double r969549 = r969544 * r969548;
        double r969550 = r969541 + r969549;
        double r969551 = acos(r969550);
        double r969552 = R;
        double r969553 = r969551 * r969552;
        return r969553;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r969554 = phi1;
        double r969555 = cos(r969554);
        double r969556 = phi2;
        double r969557 = cos(r969556);
        double r969558 = r969555 * r969557;
        double r969559 = lambda2;
        double r969560 = sin(r969559);
        double r969561 = lambda1;
        double r969562 = sin(r969561);
        double r969563 = r969560 * r969562;
        double r969564 = cos(r969559);
        double r969565 = cos(r969561);
        double r969566 = r969564 * r969565;
        double r969567 = r969563 + r969566;
        double r969568 = r969558 * r969567;
        double r969569 = sin(r969556);
        double r969570 = sin(r969554);
        double r969571 = r969569 * r969570;
        double r969572 = r969568 + r969571;
        double r969573 = acos(r969572);
        double r969574 = exp(r969573);
        double r969575 = log(r969574);
        double r969576 = R;
        double r969577 = r969575 * r969576;
        return r969577;
}

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

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

Reproduce

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