Average Error: 16.6 → 3.8
Time: 1.0m
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^{\cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\right) + \sin \phi_2 \cdot \sin \phi_1\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^{\cos^{-1} \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\right) + \sin \phi_2 \cdot \sin \phi_1\right)}\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1407151 = phi1;
        double r1407152 = sin(r1407151);
        double r1407153 = phi2;
        double r1407154 = sin(r1407153);
        double r1407155 = r1407152 * r1407154;
        double r1407156 = cos(r1407151);
        double r1407157 = cos(r1407153);
        double r1407158 = r1407156 * r1407157;
        double r1407159 = lambda1;
        double r1407160 = lambda2;
        double r1407161 = r1407159 - r1407160;
        double r1407162 = cos(r1407161);
        double r1407163 = r1407158 * r1407162;
        double r1407164 = r1407155 + r1407163;
        double r1407165 = acos(r1407164);
        double r1407166 = R;
        double r1407167 = r1407165 * r1407166;
        return r1407167;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1407168 = phi1;
        double r1407169 = cos(r1407168);
        double r1407170 = phi2;
        double r1407171 = cos(r1407170);
        double r1407172 = r1407169 * r1407171;
        double r1407173 = lambda2;
        double r1407174 = sin(r1407173);
        double r1407175 = lambda1;
        double r1407176 = sin(r1407175);
        double r1407177 = r1407174 * r1407176;
        double r1407178 = cos(r1407173);
        double r1407179 = cos(r1407175);
        double r1407180 = r1407178 * r1407179;
        double r1407181 = r1407177 + r1407180;
        double r1407182 = r1407172 * r1407181;
        double r1407183 = sin(r1407170);
        double r1407184 = sin(r1407168);
        double r1407185 = r1407183 * r1407184;
        double r1407186 = r1407182 + r1407185;
        double r1407187 = acos(r1407186);
        double r1407188 = exp(r1407187);
        double r1407189 = log(r1407188);
        double r1407190 = R;
        double r1407191 = r1407189 * r1407190;
        return r1407191;
}

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

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

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

    \[\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. Final simplification3.8

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

Reproduce

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