Average Error: 17.3 → 4.1
Time: 20.7s
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(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sqrt[3]{{\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}}\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
\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sqrt[3]{{\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}}\right)\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r26586 = phi1;
        double r26587 = sin(r26586);
        double r26588 = phi2;
        double r26589 = sin(r26588);
        double r26590 = r26587 * r26589;
        double r26591 = cos(r26586);
        double r26592 = cos(r26588);
        double r26593 = r26591 * r26592;
        double r26594 = lambda1;
        double r26595 = lambda2;
        double r26596 = r26594 - r26595;
        double r26597 = cos(r26596);
        double r26598 = r26593 * r26597;
        double r26599 = r26590 + r26598;
        double r26600 = acos(r26599);
        double r26601 = R;
        double r26602 = r26600 * r26601;
        return r26602;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r26603 = phi1;
        double r26604 = sin(r26603);
        double r26605 = phi2;
        double r26606 = sin(r26605);
        double r26607 = cos(r26603);
        double r26608 = cos(r26605);
        double r26609 = r26607 * r26608;
        double r26610 = lambda1;
        double r26611 = cos(r26610);
        double r26612 = lambda2;
        double r26613 = cos(r26612);
        double r26614 = r26611 * r26613;
        double r26615 = sin(r26610);
        double r26616 = sin(r26612);
        double r26617 = r26615 * r26616;
        double r26618 = 3.0;
        double r26619 = pow(r26617, r26618);
        double r26620 = cbrt(r26619);
        double r26621 = r26614 + r26620;
        double r26622 = r26609 * r26621;
        double r26623 = fma(r26604, r26606, r26622);
        double r26624 = acos(r26623);
        double r26625 = R;
        double r26626 = r26624 * r26625;
        return r26626;
}

Error

Bits error versus R

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Derivation

  1. Initial program 17.3

    \[\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. Simplified17.3

    \[\leadsto \color{blue}{\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)\right)\right) \cdot R}\]
  3. Using strategy rm
  4. Applied cos-diff4.0

    \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \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)\right) \cdot R\]
  5. Using strategy rm
  6. Applied add-cbrt-cube4.1

    \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \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 \color{blue}{\sqrt[3]{\left(\sin \lambda_2 \cdot \sin \lambda_2\right) \cdot \sin \lambda_2}}\right)\right)\right) \cdot R\]
  7. Applied add-cbrt-cube4.1

    \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \color{blue}{\sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_1\right) \cdot \sin \lambda_1}} \cdot \sqrt[3]{\left(\sin \lambda_2 \cdot \sin \lambda_2\right) \cdot \sin \lambda_2}\right)\right)\right) \cdot R\]
  8. Applied cbrt-unprod4.1

    \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \color{blue}{\sqrt[3]{\left(\left(\sin \lambda_1 \cdot \sin \lambda_1\right) \cdot \sin \lambda_1\right) \cdot \left(\left(\sin \lambda_2 \cdot \sin \lambda_2\right) \cdot \sin \lambda_2\right)}}\right)\right)\right) \cdot R\]
  9. Simplified4.1

    \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sqrt[3]{\color{blue}{{\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}}}\right)\right)\right) \cdot R\]
  10. Final simplification4.1

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

Reproduce

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