Average Error: 16.9 → 3.9
Time: 15.4s
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^{\frac{\pi}{2} - \left(\frac{\pi}{2} - \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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\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^{\frac{\pi}{2} - \left(\frac{\pi}{2} - \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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)}\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r29020 = phi1;
        double r29021 = sin(r29020);
        double r29022 = phi2;
        double r29023 = sin(r29022);
        double r29024 = r29021 * r29023;
        double r29025 = cos(r29020);
        double r29026 = cos(r29022);
        double r29027 = r29025 * r29026;
        double r29028 = lambda1;
        double r29029 = lambda2;
        double r29030 = r29028 - r29029;
        double r29031 = cos(r29030);
        double r29032 = r29027 * r29031;
        double r29033 = r29024 + r29032;
        double r29034 = acos(r29033);
        double r29035 = R;
        double r29036 = r29034 * r29035;
        return r29036;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r29037 = atan2(1.0, 0.0);
        double r29038 = 2.0;
        double r29039 = r29037 / r29038;
        double r29040 = phi1;
        double r29041 = sin(r29040);
        double r29042 = phi2;
        double r29043 = sin(r29042);
        double r29044 = r29041 * r29043;
        double r29045 = cos(r29040);
        double r29046 = cos(r29042);
        double r29047 = r29045 * r29046;
        double r29048 = lambda1;
        double r29049 = cos(r29048);
        double r29050 = lambda2;
        double r29051 = cos(r29050);
        double r29052 = r29049 * r29051;
        double r29053 = sin(r29048);
        double r29054 = -r29050;
        double r29055 = sin(r29054);
        double r29056 = r29053 * r29055;
        double r29057 = r29052 - r29056;
        double r29058 = r29047 * r29057;
        double r29059 = r29044 + r29058;
        double r29060 = acos(r29059);
        double r29061 = r29039 - r29060;
        double r29062 = r29039 - r29061;
        double r29063 = exp(r29062);
        double r29064 = log(r29063);
        double r29065 = R;
        double r29066 = r29064 * r29065;
        return r29066;
}

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.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. Using strategy rm
  3. Applied sub-neg16.9

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

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

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

    \[\leadsto \color{blue}{\log \left(e^{\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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}\right)} \cdot R\]
  8. Using strategy rm
  9. Applied acos-asin3.9

    \[\leadsto \log \left(e^{\color{blue}{\frac{\pi}{2} - \sin^{-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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}}\right) \cdot R\]
  10. Using strategy rm
  11. Applied asin-acos3.9

    \[\leadsto \log \left(e^{\frac{\pi}{2} - \color{blue}{\left(\frac{\pi}{2} - \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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)}}\right) \cdot R\]
  12. Final simplification3.9

    \[\leadsto \log \left(e^{\frac{\pi}{2} - \left(\frac{\pi}{2} - \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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)}\right) \cdot R\]

Reproduce

herbie shell --seed 2019344 
(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))