Average Error: 0.2 → 0.2
Time: 1.1m
Precision: 64
\[\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}\]
\[\tan^{-1}_* \frac{\left(\cos \phi_1 \cdot \sin delta\right) \cdot \sin theta}{\cos delta - \mathsf{fma}\left(\sin delta, \cos theta \cdot \cos \phi_1, \cos delta \cdot \sin \phi_1\right) \cdot \sin \phi_1} + \lambda_1\]
\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}
\tan^{-1}_* \frac{\left(\cos \phi_1 \cdot \sin delta\right) \cdot \sin theta}{\cos delta - \mathsf{fma}\left(\sin delta, \cos theta \cdot \cos \phi_1, \cos delta \cdot \sin \phi_1\right) \cdot \sin \phi_1} + \lambda_1
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r2706035 = lambda1;
        double r2706036 = theta;
        double r2706037 = sin(r2706036);
        double r2706038 = delta;
        double r2706039 = sin(r2706038);
        double r2706040 = r2706037 * r2706039;
        double r2706041 = phi1;
        double r2706042 = cos(r2706041);
        double r2706043 = r2706040 * r2706042;
        double r2706044 = cos(r2706038);
        double r2706045 = sin(r2706041);
        double r2706046 = r2706045 * r2706044;
        double r2706047 = r2706042 * r2706039;
        double r2706048 = cos(r2706036);
        double r2706049 = r2706047 * r2706048;
        double r2706050 = r2706046 + r2706049;
        double r2706051 = asin(r2706050);
        double r2706052 = sin(r2706051);
        double r2706053 = r2706045 * r2706052;
        double r2706054 = r2706044 - r2706053;
        double r2706055 = atan2(r2706043, r2706054);
        double r2706056 = r2706035 + r2706055;
        return r2706056;
}

double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r2706057 = phi1;
        double r2706058 = cos(r2706057);
        double r2706059 = delta;
        double r2706060 = sin(r2706059);
        double r2706061 = r2706058 * r2706060;
        double r2706062 = theta;
        double r2706063 = sin(r2706062);
        double r2706064 = r2706061 * r2706063;
        double r2706065 = cos(r2706059);
        double r2706066 = cos(r2706062);
        double r2706067 = r2706066 * r2706058;
        double r2706068 = sin(r2706057);
        double r2706069 = r2706065 * r2706068;
        double r2706070 = fma(r2706060, r2706067, r2706069);
        double r2706071 = r2706070 * r2706068;
        double r2706072 = r2706065 - r2706071;
        double r2706073 = atan2(r2706064, r2706072);
        double r2706074 = lambda1;
        double r2706075 = r2706073 + r2706074;
        return r2706075;
}

Error

Bits error versus lambda1

Bits error versus phi1

Bits error versus phi2

Bits error versus delta

Bits error versus theta

Derivation

  1. Initial program 0.2

    \[\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}\]
  2. Simplified0.2

    \[\leadsto \color{blue}{\lambda_1 + \tan^{-1}_* \frac{\sin theta \cdot \left(\sin delta \cdot \cos \phi_1\right)}{\cos delta - \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\sin delta \cdot \cos \phi_1, \cos theta, \cos delta \cdot \sin \phi_1\right)\right)\right) \cdot \sin \phi_1}}\]
  3. Taylor expanded around inf 0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\sin theta \cdot \left(\sin delta \cdot \cos \phi_1\right)}{\color{blue}{\cos delta - \left({\left(\sin \phi_1\right)}^{2} \cdot \cos delta + \sin delta \cdot \left(\cos \phi_1 \cdot \left(\cos theta \cdot \sin \phi_1\right)\right)\right)}}\]
  4. Simplified0.2

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

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

Reproduce

herbie shell --seed 2019200 +o rules:numerics
(FPCore (lambda1 phi1 phi2 delta theta)
  :name "Destination given bearing on a great circle"
  (+ lambda1 (atan2 (* (* (sin theta) (sin delta)) (cos phi1)) (- (cos delta) (* (sin phi1) (sin (asin (+ (* (sin phi1) (cos delta)) (* (* (cos phi1) (sin delta)) (cos theta))))))))))