Average Error: 16.6 → 3.7
Time: 14.9s
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(\sqrt[3]{\sin \phi_1 \cdot \sin \phi_2} \cdot \sqrt[3]{\sin \phi_1 \cdot \sin \phi_2}\right) \cdot \sqrt[3]{\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) \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(\sqrt[3]{\sin \phi_1 \cdot \sin \phi_2} \cdot \sqrt[3]{\sin \phi_1 \cdot \sin \phi_2}\right) \cdot \sqrt[3]{\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) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r30143 = phi1;
        double r30144 = sin(r30143);
        double r30145 = phi2;
        double r30146 = sin(r30145);
        double r30147 = r30144 * r30146;
        double r30148 = cos(r30143);
        double r30149 = cos(r30145);
        double r30150 = r30148 * r30149;
        double r30151 = lambda1;
        double r30152 = lambda2;
        double r30153 = r30151 - r30152;
        double r30154 = cos(r30153);
        double r30155 = r30150 * r30154;
        double r30156 = r30147 + r30155;
        double r30157 = acos(r30156);
        double r30158 = R;
        double r30159 = r30157 * r30158;
        return r30159;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r30160 = phi1;
        double r30161 = sin(r30160);
        double r30162 = phi2;
        double r30163 = sin(r30162);
        double r30164 = r30161 * r30163;
        double r30165 = cbrt(r30164);
        double r30166 = r30165 * r30165;
        double r30167 = r30166 * r30165;
        double r30168 = cos(r30160);
        double r30169 = cos(r30162);
        double r30170 = r30168 * r30169;
        double r30171 = lambda1;
        double r30172 = cos(r30171);
        double r30173 = lambda2;
        double r30174 = cos(r30173);
        double r30175 = r30172 * r30174;
        double r30176 = sin(r30171);
        double r30177 = sin(r30173);
        double r30178 = r30176 * r30177;
        double r30179 = r30175 + r30178;
        double r30180 = r30170 * r30179;
        double r30181 = r30167 + r30180;
        double r30182 = acos(r30181);
        double r30183 = R;
        double r30184 = r30182 * r30183;
        return r30184;
}

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.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-cube-cbrt3.7

    \[\leadsto \cos^{-1} \left(\color{blue}{\left(\sqrt[3]{\sin \phi_1 \cdot \sin \phi_2} \cdot \sqrt[3]{\sin \phi_1 \cdot \sin \phi_2}\right) \cdot \sqrt[3]{\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) \cdot R\]
  6. Final simplification3.7

    \[\leadsto \cos^{-1} \left(\left(\sqrt[3]{\sin \phi_1 \cdot \sin \phi_2} \cdot \sqrt[3]{\sin \phi_1 \cdot \sin \phi_2}\right) \cdot \sqrt[3]{\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) \cdot R\]

Reproduce

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