Average Error: 17.4 → 4.0
Time: 13.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\]
\[R \cdot \log \left(e^{\cos^{-1} \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-1 \cdot \lambda_2\right)\right)\right)\right) + \sin \phi_1 \cdot \sin \phi_2\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 \log \left(e^{\cos^{-1} \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-1 \cdot \lambda_2\right)\right)\right)\right) + \sin \phi_1 \cdot \sin \phi_2\right)}\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r27141 = phi1;
        double r27142 = sin(r27141);
        double r27143 = phi2;
        double r27144 = sin(r27143);
        double r27145 = r27142 * r27144;
        double r27146 = cos(r27141);
        double r27147 = cos(r27143);
        double r27148 = r27146 * r27147;
        double r27149 = lambda1;
        double r27150 = lambda2;
        double r27151 = r27149 - r27150;
        double r27152 = cos(r27151);
        double r27153 = r27148 * r27152;
        double r27154 = r27145 + r27153;
        double r27155 = acos(r27154);
        double r27156 = R;
        double r27157 = r27155 * r27156;
        return r27157;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r27158 = R;
        double r27159 = phi1;
        double r27160 = cos(r27159);
        double r27161 = phi2;
        double r27162 = cos(r27161);
        double r27163 = lambda1;
        double r27164 = cos(r27163);
        double r27165 = lambda2;
        double r27166 = cos(r27165);
        double r27167 = r27164 * r27166;
        double r27168 = sin(r27163);
        double r27169 = -1.0;
        double r27170 = r27169 * r27165;
        double r27171 = sin(r27170);
        double r27172 = r27168 * r27171;
        double r27173 = r27167 - r27172;
        double r27174 = log1p(r27173);
        double r27175 = expm1(r27174);
        double r27176 = r27162 * r27175;
        double r27177 = r27160 * r27176;
        double r27178 = sin(r27159);
        double r27179 = sin(r27161);
        double r27180 = r27178 * r27179;
        double r27181 = r27177 + r27180;
        double r27182 = acos(r27181);
        double r27183 = exp(r27182);
        double r27184 = log(r27183);
        double r27185 = r27158 * r27184;
        return r27185;
}

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 17.4

    \[\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 sub-neg17.4

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \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) \cdot R\]
  4. Applied cos-sum4.0

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

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\color{blue}{\cos \lambda_1 \cdot \cos \lambda_2} - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) \cdot R\]
  6. Using strategy rm
  7. Applied expm1-log1p-u4.0

    \[\leadsto \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}\right) \cdot R\]
  8. Taylor expanded around 0 4.0

    \[\leadsto \color{blue}{R \cdot \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right)}\]
  9. Using strategy rm
  10. Applied add-log-exp4.0

    \[\leadsto R \cdot \color{blue}{\log \left(e^{\cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \cos \phi_1 \cdot \left(\cos \phi_2 \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right)}\right)}\]
  11. Simplified4.0

    \[\leadsto R \cdot \log \color{blue}{\left(e^{\cos^{-1} \left(\cos \phi_1 \cdot \left(\cos \phi_2 \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-1 \cdot \lambda_2\right)\right)\right)\right) + \sin \phi_1 \cdot \sin \phi_2\right)}\right)}\]
  12. Final simplification4.0

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

Reproduce

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