Average Error: 0.9 → 0.3
Time: 30.4s
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)}\]
\[\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\frac{\mathsf{fma}\left(\cos \phi_1, \cos \phi_1 \cdot \cos \phi_1, \left(\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right)\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right)\right)}{\mathsf{fma}\left(\cos \phi_1 - \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2, \cos \phi_1, \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right)\right)}} + \lambda_1\]
\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)}
\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\frac{\mathsf{fma}\left(\cos \phi_1, \cos \phi_1 \cdot \cos \phi_1, \left(\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right)\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right)\right)}{\mathsf{fma}\left(\cos \phi_1 - \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2, \cos \phi_1, \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right)\right)}} + \lambda_1
double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r1817066 = lambda1;
        double r1817067 = phi2;
        double r1817068 = cos(r1817067);
        double r1817069 = lambda2;
        double r1817070 = r1817066 - r1817069;
        double r1817071 = sin(r1817070);
        double r1817072 = r1817068 * r1817071;
        double r1817073 = phi1;
        double r1817074 = cos(r1817073);
        double r1817075 = cos(r1817070);
        double r1817076 = r1817068 * r1817075;
        double r1817077 = r1817074 + r1817076;
        double r1817078 = atan2(r1817072, r1817077);
        double r1817079 = r1817066 + r1817078;
        return r1817079;
}

double f(double lambda1, double lambda2, double phi1, double phi2) {
        double r1817080 = lambda1;
        double r1817081 = sin(r1817080);
        double r1817082 = lambda2;
        double r1817083 = cos(r1817082);
        double r1817084 = r1817081 * r1817083;
        double r1817085 = cos(r1817080);
        double r1817086 = sin(r1817082);
        double r1817087 = r1817085 * r1817086;
        double r1817088 = r1817084 - r1817087;
        double r1817089 = phi2;
        double r1817090 = cos(r1817089);
        double r1817091 = r1817088 * r1817090;
        double r1817092 = phi1;
        double r1817093 = cos(r1817092);
        double r1817094 = r1817093 * r1817093;
        double r1817095 = r1817086 * r1817081;
        double r1817096 = fma(r1817085, r1817083, r1817095);
        double r1817097 = r1817096 * r1817090;
        double r1817098 = r1817097 * r1817097;
        double r1817099 = r1817098 * r1817097;
        double r1817100 = fma(r1817093, r1817094, r1817099);
        double r1817101 = r1817093 - r1817097;
        double r1817102 = fma(r1817101, r1817093, r1817098);
        double r1817103 = r1817100 / r1817102;
        double r1817104 = atan2(r1817091, r1817103);
        double r1817105 = r1817104 + r1817080;
        return r1817105;
}

Error

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Derivation

  1. Initial program 0.9

    \[\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. Simplified0.9

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

    \[\leadsto \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 \phi_2, \cos \left(\lambda_1 - \lambda_2\right), \cos \phi_1\right)} + \lambda_1\]
  5. Using strategy rm
  6. Applied cos-diff0.2

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

    \[\leadsto \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}{\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) + \cos \phi_1}} + \lambda_1\]
  9. Simplified0.2

    \[\leadsto \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}{\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2} + \cos \phi_1} + \lambda_1\]
  10. Using strategy rm
  11. Applied flip3-+0.3

    \[\leadsto \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, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right)}^{3} + {\left(\cos \phi_1\right)}^{3}}{\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) + \left(\cos \phi_1 \cdot \cos \phi_1 - \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) \cdot \cos \phi_1\right)}}} + \lambda_1\]
  12. Simplified0.3

    \[\leadsto \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}{\mathsf{fma}\left(\cos \phi_1, \cos \phi_1 \cdot \cos \phi_1, \left(\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)\right)}}{\left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) + \left(\cos \phi_1 \cdot \cos \phi_1 - \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2\right) \cdot \cos \phi_1\right)}} + \lambda_1\]
  13. Simplified0.3

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

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

Reproduce

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