Average Error: 16.8 → 3.8
Time: 49.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\]
\[R \cdot \cos^{-1} \left(\left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1}\right) + \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \sin \phi_2 \cdot \sin \phi_1\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 \cos^{-1} \left(\left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1}\right) + \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \phi_1 \cdot \cos \phi_2\right) + \sin \phi_2 \cdot \sin \phi_1\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r729561 = phi1;
        double r729562 = sin(r729561);
        double r729563 = phi2;
        double r729564 = sin(r729563);
        double r729565 = r729562 * r729564;
        double r729566 = cos(r729561);
        double r729567 = cos(r729563);
        double r729568 = r729566 * r729567;
        double r729569 = lambda1;
        double r729570 = lambda2;
        double r729571 = r729569 - r729570;
        double r729572 = cos(r729571);
        double r729573 = r729568 * r729572;
        double r729574 = r729565 + r729573;
        double r729575 = acos(r729574);
        double r729576 = R;
        double r729577 = r729575 * r729576;
        return r729577;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r729578 = R;
        double r729579 = lambda2;
        double r729580 = sin(r729579);
        double r729581 = lambda1;
        double r729582 = sin(r729581);
        double r729583 = r729580 * r729582;
        double r729584 = cbrt(r729583);
        double r729585 = r729584 * r729584;
        double r729586 = r729584 * r729585;
        double r729587 = cos(r729579);
        double r729588 = cos(r729581);
        double r729589 = r729587 * r729588;
        double r729590 = r729586 + r729589;
        double r729591 = phi1;
        double r729592 = cos(r729591);
        double r729593 = phi2;
        double r729594 = cos(r729593);
        double r729595 = r729592 * r729594;
        double r729596 = r729590 * r729595;
        double r729597 = sin(r729593);
        double r729598 = sin(r729591);
        double r729599 = r729597 * r729598;
        double r729600 = r729596 + r729599;
        double r729601 = acos(r729600);
        double r729602 = r729578 * r729601;
        return r729602;
}

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

    \[\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-cube-cbrt3.8

    \[\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}{\left(\sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}}\right)\right) \cdot R\]
  6. Final simplification3.8

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

Reproduce

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