Average Error: 24.1 → 24.1
Time: 55.9s
Precision: 64
\[R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)\]
\[\left(2 \cdot R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1, \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\cos \phi_1 \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}\right) \cdot \left(\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right) \cdot \cos \phi_2\right)}}\]
R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)
\left(2 \cdot R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1, \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\cos \phi_1 \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}\right) \cdot \left(\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right) \cdot \cos \phi_2\right)}}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1287199 = R;
        double r1287200 = 2.0;
        double r1287201 = phi1;
        double r1287202 = phi2;
        double r1287203 = r1287201 - r1287202;
        double r1287204 = r1287203 / r1287200;
        double r1287205 = sin(r1287204);
        double r1287206 = pow(r1287205, r1287200);
        double r1287207 = cos(r1287201);
        double r1287208 = cos(r1287202);
        double r1287209 = r1287207 * r1287208;
        double r1287210 = lambda1;
        double r1287211 = lambda2;
        double r1287212 = r1287210 - r1287211;
        double r1287213 = r1287212 / r1287200;
        double r1287214 = sin(r1287213);
        double r1287215 = r1287209 * r1287214;
        double r1287216 = r1287215 * r1287214;
        double r1287217 = r1287206 + r1287216;
        double r1287218 = sqrt(r1287217);
        double r1287219 = 1.0;
        double r1287220 = r1287219 - r1287217;
        double r1287221 = sqrt(r1287220);
        double r1287222 = atan2(r1287218, r1287221);
        double r1287223 = r1287200 * r1287222;
        double r1287224 = r1287199 * r1287223;
        return r1287224;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1287225 = 2.0;
        double r1287226 = R;
        double r1287227 = r1287225 * r1287226;
        double r1287228 = phi2;
        double r1287229 = cos(r1287228);
        double r1287230 = lambda1;
        double r1287231 = lambda2;
        double r1287232 = r1287230 - r1287231;
        double r1287233 = r1287232 / r1287225;
        double r1287234 = sin(r1287233);
        double r1287235 = r1287229 * r1287234;
        double r1287236 = phi1;
        double r1287237 = cos(r1287236);
        double r1287238 = r1287234 * r1287237;
        double r1287239 = r1287236 - r1287228;
        double r1287240 = r1287239 / r1287225;
        double r1287241 = sin(r1287240);
        double r1287242 = log1p(r1287241);
        double r1287243 = expm1(r1287242);
        double r1287244 = r1287241 * r1287243;
        double r1287245 = fma(r1287235, r1287238, r1287244);
        double r1287246 = sqrt(r1287245);
        double r1287247 = cos(r1287240);
        double r1287248 = r1287247 * r1287247;
        double r1287249 = r1287234 * r1287234;
        double r1287250 = r1287234 * r1287249;
        double r1287251 = cbrt(r1287250);
        double r1287252 = r1287237 * r1287251;
        double r1287253 = log1p(r1287234);
        double r1287254 = expm1(r1287253);
        double r1287255 = r1287254 * r1287229;
        double r1287256 = r1287252 * r1287255;
        double r1287257 = r1287248 - r1287256;
        double r1287258 = sqrt(r1287257);
        double r1287259 = atan2(r1287246, r1287258);
        double r1287260 = r1287227 * r1287259;
        return r1287260;
}

Error

Bits error versus R

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Derivation

  1. Initial program 24.1

    \[R \cdot \left(2 \cdot \tan^{-1}_* \frac{\sqrt{{\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}{\sqrt{1 - \left({\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}^{2} + \left(\left(\cos \phi_1 \cdot \cos \phi_2\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}}\right)\]
  2. Simplified24.0

    \[\leadsto \color{blue}{\tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_2, \cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_2\right) \cdot \left(\cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}} \cdot \left(R \cdot 2\right)}\]
  3. Using strategy rm
  4. Applied expm1-log1p-u24.1

    \[\leadsto \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_2, \cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right)} \cdot \cos \phi_2\right) \cdot \left(\cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}} \cdot \left(R \cdot 2\right)\]
  5. Using strategy rm
  6. Applied add-cbrt-cube24.1

    \[\leadsto \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_2, \cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right) \cdot \cos \phi_2\right) \cdot \left(\cos \phi_1 \cdot \color{blue}{\sqrt[3]{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}}\right)}} \cdot \left(R \cdot 2\right)\]
  7. Using strategy rm
  8. Applied expm1-log1p-u24.1

    \[\leadsto \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_2, \cos \phi_1 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)\right)} \cdot \sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right) \cdot \cos \phi_2\right) \cdot \left(\cos \phi_1 \cdot \sqrt[3]{\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)}\right)}} \cdot \left(R \cdot 2\right)\]
  9. Final simplification24.1

    \[\leadsto \left(2 \cdot R\right) \cdot \tan^{-1}_* \frac{\sqrt{\mathsf{fma}\left(\cos \phi_2 \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right), \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \cos \phi_1, \sin \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\phi_1 - \phi_2}{2}\right)\right)\right)\right)}}{\sqrt{\cos \left(\frac{\phi_1 - \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 - \phi_2}{2}\right) - \left(\cos \phi_1 \cdot \sqrt[3]{\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right) \cdot \sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)}\right) \cdot \left(\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \left(\frac{\lambda_1 - \lambda_2}{2}\right)\right)\right) \cdot \cos \phi_2\right)}}\]

Reproduce

herbie shell --seed 2019155 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Distance on a great circle"
  (* R (* 2 (atan2 (sqrt (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))) (sqrt (- 1 (+ (pow (sin (/ (- phi1 phi2) 2)) 2) (* (* (* (cos phi1) (cos phi2)) (sin (/ (- lambda1 lambda2) 2))) (sin (/ (- lambda1 lambda2) 2))))))))))