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 r3629162 = lambda1;
        double r3629163 = theta;
        double r3629164 = sin(r3629163);
        double r3629165 = delta;
        double r3629166 = sin(r3629165);
        double r3629167 = r3629164 * r3629166;
        double r3629168 = phi1;
        double r3629169 = cos(r3629168);
        double r3629170 = r3629167 * r3629169;
        double r3629171 = cos(r3629165);
        double r3629172 = sin(r3629168);
        double r3629173 = r3629172 * r3629171;
        double r3629174 = r3629169 * r3629166;
        double r3629175 = cos(r3629163);
        double r3629176 = r3629174 * r3629175;
        double r3629177 = r3629173 + r3629176;
        double r3629178 = asin(r3629177);
        double r3629179 = sin(r3629178);
        double r3629180 = r3629172 * r3629179;
        double r3629181 = r3629171 - r3629180;
        double r3629182 = atan2(r3629170, r3629181);
        double r3629183 = r3629162 + r3629182;
        return r3629183;
}

double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r3629184 = phi1;
        double r3629185 = cos(r3629184);
        double r3629186 = delta;
        double r3629187 = sin(r3629186);
        double r3629188 = r3629185 * r3629187;
        double r3629189 = theta;
        double r3629190 = sin(r3629189);
        double r3629191 = r3629188 * r3629190;
        double r3629192 = cos(r3629186);
        double r3629193 = cos(r3629189);
        double r3629194 = r3629193 * r3629185;
        double r3629195 = sin(r3629184);
        double r3629196 = r3629192 * r3629195;
        double r3629197 = fma(r3629187, r3629194, r3629196);
        double r3629198 = r3629197 * r3629195;
        double r3629199 = r3629192 - r3629198;
        double r3629200 = atan2(r3629191, r3629199);
        double r3629201 = lambda1;
        double r3629202 = r3629200 + r3629201;
        return r3629202;
}

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))))))))))