Average Error: 16.8 → 3.6
Time: 1.1m
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\]
\[\cos^{-1} \left(\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot \cos \phi_1 + \sin \phi_2 \cdot \sin \phi_1\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
\cos^{-1} \left(\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot \cos \phi_1 + \sin \phi_2 \cdot \sin \phi_1\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2228181 = phi1;
        double r2228182 = sin(r2228181);
        double r2228183 = phi2;
        double r2228184 = sin(r2228183);
        double r2228185 = r2228182 * r2228184;
        double r2228186 = cos(r2228181);
        double r2228187 = cos(r2228183);
        double r2228188 = r2228186 * r2228187;
        double r2228189 = lambda1;
        double r2228190 = lambda2;
        double r2228191 = r2228189 - r2228190;
        double r2228192 = cos(r2228191);
        double r2228193 = r2228188 * r2228192;
        double r2228194 = r2228185 + r2228193;
        double r2228195 = acos(r2228194);
        double r2228196 = R;
        double r2228197 = r2228195 * r2228196;
        return r2228197;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2228198 = phi2;
        double r2228199 = cos(r2228198);
        double r2228200 = lambda1;
        double r2228201 = cos(r2228200);
        double r2228202 = lambda2;
        double r2228203 = cos(r2228202);
        double r2228204 = r2228201 * r2228203;
        double r2228205 = sin(r2228202);
        double r2228206 = sin(r2228200);
        double r2228207 = r2228205 * r2228206;
        double r2228208 = r2228204 + r2228207;
        double r2228209 = r2228199 * r2228208;
        double r2228210 = phi1;
        double r2228211 = cos(r2228210);
        double r2228212 = r2228209 * r2228211;
        double r2228213 = sin(r2228198);
        double r2228214 = sin(r2228210);
        double r2228215 = r2228213 * r2228214;
        double r2228216 = r2228212 + r2228215;
        double r2228217 = acos(r2228216);
        double r2228218 = R;
        double r2228219 = r2228217 * r2228218;
        return r2228219;
}

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

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

    \[\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 \cos^{-1} \left(\sin \phi_1 \cdot \sin \phi_2 + \color{blue}{\log \left(e^{\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. Taylor expanded around -inf 3.6

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

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

Reproduce

herbie shell --seed 2019119 
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Spherical law of cosines"
  (* (acos (+ (* (sin phi1) (sin phi2)) (* (* (cos phi1) (cos phi2)) (cos (- lambda1 lambda2))))) R))