Average Error: 16.9 → 3.7
Time: 38.2s
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(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_2 \cdot \cos \lambda_1 + \sqrt[3]{\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}, \sin \phi_2 \cdot \sin \phi_1\right)\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(\mathsf{fma}\left(\cos \phi_2 \cdot \cos \phi_1, \cos \lambda_2 \cdot \cos \lambda_1 + \sqrt[3]{\left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}, \sin \phi_2 \cdot \sin \phi_1\right)\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r859144 = phi1;
        double r859145 = sin(r859144);
        double r859146 = phi2;
        double r859147 = sin(r859146);
        double r859148 = r859145 * r859147;
        double r859149 = cos(r859144);
        double r859150 = cos(r859146);
        double r859151 = r859149 * r859150;
        double r859152 = lambda1;
        double r859153 = lambda2;
        double r859154 = r859152 - r859153;
        double r859155 = cos(r859154);
        double r859156 = r859151 * r859155;
        double r859157 = r859148 + r859156;
        double r859158 = acos(r859157);
        double r859159 = R;
        double r859160 = r859158 * r859159;
        return r859160;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r859161 = R;
        double r859162 = phi2;
        double r859163 = cos(r859162);
        double r859164 = phi1;
        double r859165 = cos(r859164);
        double r859166 = r859163 * r859165;
        double r859167 = lambda2;
        double r859168 = cos(r859167);
        double r859169 = lambda1;
        double r859170 = cos(r859169);
        double r859171 = r859168 * r859170;
        double r859172 = sin(r859169);
        double r859173 = sin(r859167);
        double r859174 = r859172 * r859173;
        double r859175 = r859174 * r859174;
        double r859176 = r859175 * r859174;
        double r859177 = cbrt(r859176);
        double r859178 = r859171 + r859177;
        double r859179 = sin(r859162);
        double r859180 = sin(r859164);
        double r859181 = r859179 * r859180;
        double r859182 = fma(r859166, r859178, r859181);
        double r859183 = acos(r859182);
        double r859184 = r859161 * r859183;
        return r859184;
}

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

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

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

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

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

    \[\leadsto R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \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}, \sin \phi_2 \cdot \sin \phi_1\right)\right)\]
  8. Applied cbrt-unprod3.7

    \[\leadsto R \cdot \cos^{-1} \left(\mathsf{fma}\left(\cos \phi_1 \cdot \cos \phi_2, \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)}}, \sin \phi_2 \cdot \sin \phi_1\right)\right)\]
  9. Simplified3.7

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

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

Reproduce

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