Average Error: 16.5 → 3.8
Time: 39.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^{e^{\log \left(\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 \lambda_2\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^{e^{\log \left(\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 \lambda_2\right)\right)\right)}}\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r22045 = phi1;
        double r22046 = sin(r22045);
        double r22047 = phi2;
        double r22048 = sin(r22047);
        double r22049 = r22046 * r22048;
        double r22050 = cos(r22045);
        double r22051 = cos(r22047);
        double r22052 = r22050 * r22051;
        double r22053 = lambda1;
        double r22054 = lambda2;
        double r22055 = r22053 - r22054;
        double r22056 = cos(r22055);
        double r22057 = r22052 * r22056;
        double r22058 = r22049 + r22057;
        double r22059 = acos(r22058);
        double r22060 = R;
        double r22061 = r22059 * r22060;
        return r22061;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r22062 = phi1;
        double r22063 = sin(r22062);
        double r22064 = phi2;
        double r22065 = sin(r22064);
        double r22066 = r22063 * r22065;
        double r22067 = cos(r22062);
        double r22068 = cos(r22064);
        double r22069 = r22067 * r22068;
        double r22070 = lambda1;
        double r22071 = cos(r22070);
        double r22072 = lambda2;
        double r22073 = cos(r22072);
        double r22074 = r22071 * r22073;
        double r22075 = sin(r22070);
        double r22076 = sin(r22072);
        double r22077 = r22075 * r22076;
        double r22078 = r22074 + r22077;
        double r22079 = r22069 * r22078;
        double r22080 = r22066 + r22079;
        double r22081 = acos(r22080);
        double r22082 = log(r22081);
        double r22083 = exp(r22082);
        double r22084 = exp(r22083);
        double r22085 = log(r22084);
        double r22086 = R;
        double r22087 = r22085 * r22086;
        return r22087;
}

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

    \[\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 cos-diff3.7

    \[\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 \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R\]
  4. Using strategy rm
  5. Applied add-log-exp3.7

    \[\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 \lambda_2\right)\right)}\right)} \cdot R\]
  6. Using strategy rm
  7. Applied add-exp-log3.8

    \[\leadsto \log \left(e^{\color{blue}{e^{\log \left(\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 \lambda_2\right)\right)\right)}}}\right) \cdot R\]
  8. Final simplification3.8

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

Reproduce

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