Average Error: 16.3 → 3.8
Time: 46.5s
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(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \log \left(e^{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right)}\right)\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
\log \left(e^{\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \log \left(e^{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right)}\right)\right)\right)}\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r26058 = phi1;
        double r26059 = sin(r26058);
        double r26060 = phi2;
        double r26061 = sin(r26060);
        double r26062 = r26059 * r26061;
        double r26063 = cos(r26058);
        double r26064 = cos(r26060);
        double r26065 = r26063 * r26064;
        double r26066 = lambda1;
        double r26067 = lambda2;
        double r26068 = r26066 - r26067;
        double r26069 = cos(r26068);
        double r26070 = r26065 * r26069;
        double r26071 = r26062 + r26070;
        double r26072 = acos(r26071);
        double r26073 = R;
        double r26074 = r26072 * r26073;
        return r26074;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r26075 = phi1;
        double r26076 = sin(r26075);
        double r26077 = phi2;
        double r26078 = sin(r26077);
        double r26079 = cos(r26075);
        double r26080 = cos(r26077);
        double r26081 = r26079 * r26080;
        double r26082 = lambda1;
        double r26083 = cos(r26082);
        double r26084 = lambda2;
        double r26085 = cos(r26084);
        double r26086 = sin(r26084);
        double r26087 = sin(r26082);
        double r26088 = r26086 * r26087;
        double r26089 = fma(r26083, r26085, r26088);
        double r26090 = r26081 * r26089;
        double r26091 = exp(r26090);
        double r26092 = log(r26091);
        double r26093 = fma(r26076, r26078, r26092);
        double r26094 = acos(r26093);
        double r26095 = exp(r26094);
        double r26096 = log(r26095);
        double r26097 = R;
        double r26098 = r26096 * r26097;
        return r26098;
}

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 16.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. Simplified16.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 sub-neg16.3

    \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \cos \color{blue}{\left(\lambda_1 + \left(-\lambda_2\right)\right)}\right)\right) \cdot R\]
  5. Applied cos-sum3.7

    \[\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 \left(-\lambda_2\right) - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}\right)\right) \cdot R\]
  6. Simplified3.7

    \[\leadsto \cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\cos \lambda_2 \cdot \cos \lambda_1} - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right) \cdot R\]
  7. Using strategy rm
  8. Applied add-cbrt-cube3.7

    \[\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_2 \cdot \cos \lambda_1 - \sin \lambda_1 \cdot \color{blue}{\sqrt[3]{\left(\sin \left(-\lambda_2\right) \cdot \sin \left(-\lambda_2\right)\right) \cdot \sin \left(-\lambda_2\right)}}\right)\right)\right) \cdot R\]
  9. Applied add-cbrt-cube3.7

    \[\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_2 \cdot \cos \lambda_1 - \color{blue}{\sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_1\right) \cdot \sin \lambda_1}} \cdot \sqrt[3]{\left(\sin \left(-\lambda_2\right) \cdot \sin \left(-\lambda_2\right)\right) \cdot \sin \left(-\lambda_2\right)}\right)\right)\right) \cdot R\]
  10. Applied cbrt-unprod3.7

    \[\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_2 \cdot \cos \lambda_1 - \color{blue}{\sqrt[3]{\left(\left(\sin \lambda_1 \cdot \sin \lambda_1\right) \cdot \sin \lambda_1\right) \cdot \left(\left(\sin \left(-\lambda_2\right) \cdot \sin \left(-\lambda_2\right)\right) \cdot \sin \left(-\lambda_2\right)\right)}}\right)\right)\right) \cdot R\]
  11. Simplified3.7

    \[\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_2 \cdot \cos \lambda_1 - \sqrt[3]{\color{blue}{{\left(\sin \left(-\lambda_2\right) \cdot \sin \lambda_1\right)}^{3}}}\right)\right)\right) \cdot R\]
  12. Using strategy rm
  13. Applied add-log-exp3.7

    \[\leadsto \color{blue}{\log \left(e^{\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_2 \cdot \cos \lambda_1 - \sqrt[3]{{\left(\sin \left(-\lambda_2\right) \cdot \sin \lambda_1\right)}^{3}}\right)\right)\right)}\right)} \cdot R\]
  14. Simplified3.7

    \[\leadsto \log \color{blue}{\left(e^{\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right)\right)\right)}\right)} \cdot R\]
  15. Using strategy rm
  16. Applied add-log-exp3.8

    \[\leadsto \log \left(e^{\cos^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \sin \phi_2, \color{blue}{\log \left(e^{\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right)}\right)}\right)\right)}\right) \cdot R\]
  17. Final simplification3.8

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

Reproduce

herbie shell --seed 2019325 +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))