Average Error: 16.9 → 3.9
Time: 14.1s
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\]
\[e^{\log \left(\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)\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
e^{\log \left(\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)\right)} \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r23092 = phi1;
        double r23093 = sin(r23092);
        double r23094 = phi2;
        double r23095 = sin(r23094);
        double r23096 = r23093 * r23095;
        double r23097 = cos(r23092);
        double r23098 = cos(r23094);
        double r23099 = r23097 * r23098;
        double r23100 = lambda1;
        double r23101 = lambda2;
        double r23102 = r23100 - r23101;
        double r23103 = cos(r23102);
        double r23104 = r23099 * r23103;
        double r23105 = r23096 + r23104;
        double r23106 = acos(r23105);
        double r23107 = R;
        double r23108 = r23106 * r23107;
        return r23108;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r23109 = phi1;
        double r23110 = sin(r23109);
        double r23111 = phi2;
        double r23112 = sin(r23111);
        double r23113 = r23110 * r23112;
        double r23114 = cos(r23109);
        double r23115 = cos(r23111);
        double r23116 = r23114 * r23115;
        double r23117 = lambda1;
        double r23118 = cos(r23117);
        double r23119 = lambda2;
        double r23120 = cos(r23119);
        double r23121 = r23118 * r23120;
        double r23122 = sin(r23117);
        double r23123 = sin(r23119);
        double r23124 = r23122 * r23123;
        double r23125 = r23121 + r23124;
        double r23126 = r23116 * r23125;
        double r23127 = r23113 + r23126;
        double r23128 = acos(r23127);
        double r23129 = exp(r23128);
        double r23130 = log(r23129);
        double r23131 = log(r23130);
        double r23132 = exp(r23131);
        double r23133 = R;
        double r23134 = r23132 * r23133;
        return r23134;
}

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 cos-diff3.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 \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot R\]
  4. Using strategy rm
  5. Applied add-exp-log3.9

    \[\leadsto \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)}} \cdot R\]
  6. Using strategy rm
  7. Applied add-log-exp3.9

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

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

Reproduce

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