Average Error: 1.0 → 0.2
Time: 11.0s
Precision: 64
\[\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
\[\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\frac{\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right) + {\left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}{\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right), \mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right), \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right)\right)}}\]
\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}
\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\frac{\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right) + {\left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}{\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right), \mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right), \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right)\right)}}
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r54023 = lambda1;
        double r54024 = phi2;
        double r54025 = cos(r54024);
        double r54026 = lambda2;
        double r54027 = r54023 - r54026;
        double r54028 = sin(r54027);
        double r54029 = r54025 * r54028;
        double r54030 = phi1;
        double r54031 = cos(r54030);
        double r54032 = cos(r54027);
        double r54033 = r54025 * r54032;
        double r54034 = r54031 + r54033;
        double r54035 = atan2(r54029, r54034);
        double r54036 = r54023 + r54035;
        return r54036;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r54037 = lambda1;
        double r54038 = phi2;
        double r54039 = cos(r54038);
        double r54040 = sin(r54037);
        double r54041 = lambda2;
        double r54042 = cos(r54041);
        double r54043 = r54040 * r54042;
        double r54044 = cos(r54037);
        double r54045 = sin(r54041);
        double r54046 = r54044 * r54045;
        double r54047 = r54043 - r54046;
        double r54048 = r54039 * r54047;
        double r54049 = r54042 * r54039;
        double r54050 = phi1;
        double r54051 = cos(r54050);
        double r54052 = fma(r54044, r54049, r54051);
        double r54053 = r54052 * r54052;
        double r54054 = r54053 * r54052;
        double r54055 = r54040 * r54045;
        double r54056 = r54039 * r54055;
        double r54057 = 3.0;
        double r54058 = pow(r54056, r54057);
        double r54059 = r54054 + r54058;
        double r54060 = r54039 * r54042;
        double r54061 = fma(r54044, r54060, r54051);
        double r54062 = r54056 - r54052;
        double r54063 = r54056 * r54062;
        double r54064 = fma(r54061, r54061, r54063);
        double r54065 = r54059 / r54064;
        double r54066 = atan2(r54048, r54065);
        double r54067 = r54037 + r54066;
        return r54067;
}

Error

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Derivation

  1. Initial program 1.0

    \[\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\]
  2. Using strategy rm
  3. Applied cos-diff1.0

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \color{blue}{\left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}}\]
  4. Applied distribute-lft-in1.0

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \color{blue}{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}}\]
  5. Applied associate-+r+1.0

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\color{blue}{\left(\cos \phi_1 + \cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}}\]
  6. Simplified1.0

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

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \color{blue}{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}}{\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right) + \cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\]
  9. Using strategy rm
  10. Applied flip3-+0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\color{blue}{\frac{{\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right)}^{3} + {\left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}{\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right) + \left(\left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) - \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right) \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)\right)}}}\]
  11. Simplified0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\frac{{\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right)}^{3} + {\left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}{\color{blue}{\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right), \mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right), \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right)\right)}}}\]
  12. Using strategy rm
  13. Applied add-cbrt-cube0.4

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\frac{{\color{blue}{\left(\sqrt[3]{\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)}\right)}}^{3} + {\left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}{\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right), \mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right), \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right)\right)}}\]
  14. Applied rem-cube-cbrt0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\frac{\color{blue}{\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)} + {\left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}{\mathsf{fma}\left(\mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right), \mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right), \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2 \cdot \cos \phi_2, \cos \phi_1\right)\right)\right)}}\]
  15. Final simplification0.2

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

Reproduce

herbie shell --seed 2020056 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
  :name "Midpoint on a great circle"
  :precision binary64
  (+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))