#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Destination given bearing on a great circle";

double f_if(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r9777 = lambda1;
        float r9778 = theta;
        float r9779 = sin(r9778);
        float r9780 = delta;
        float r9781 = sin(r9780);
        float r9782 = r9779 * r9781;
        float r9783 = phi1;
        float r9784 = cos(r9783);
        float r9785 = r9782 * r9784;
        float r9786 = cos(r9780);
        float r9787 = sin(r9783);
        float r9788 = r9787 * r9786;
        float r9789 = r9784 * r9781;
        float r9790 = cos(r9778);
        float r9791 = r9789 * r9790;
        float r9792 = r9788 + r9791;
        float r9793 = asin(r9792);
        float r9794 = sin(r9793);
        float r9795 = r9787 * r9794;
        float r9796 = r9786 - r9795;
        float r9797 = atan2(r9785, r9796);
        float r9798 = r9777 + r9797;
        return r9798;
}

double f_id(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r9799 = lambda1;
        double r9800 = theta;
        double r9801 = sin(r9800);
        double r9802 = delta;
        double r9803 = sin(r9802);
        double r9804 = r9801 * r9803;
        double r9805 = phi1;
        double r9806 = cos(r9805);
        double r9807 = r9804 * r9806;
        double r9808 = cos(r9802);
        double r9809 = sin(r9805);
        double r9810 = r9809 * r9808;
        double r9811 = r9806 * r9803;
        double r9812 = cos(r9800);
        double r9813 = r9811 * r9812;
        double r9814 = r9810 + r9813;
        double r9815 = asin(r9814);
        double r9816 = sin(r9815);
        double r9817 = r9809 * r9816;
        double r9818 = r9808 - r9817;
        double r9819 = atan2(r9807, r9818);
        double r9820 = r9799 + r9819;
        return r9820;
}


double f_of(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r9821 = lambda1;
        float r9822 = delta;
        float r9823 = sin(r9822);
        float r9824 = phi1;
        float r9825 = cos(r9824);
        float r9826 = r9823 * r9825;
        float r9827 = theta;
        float r9828 = sin(r9827);
        float r9829 = r9826 * r9828;
        float r9830 = cos(r9822);
        float r9831 = r9825 * r9825;
        float r9832 = r9830 * r9831;
        float r9833 = cos(r9827);
        float r9834 = r9833 * r9823;
        float r9835 = sin(r9824);
        float r9836 = r9835 * r9825;
        float r9837 = r9834 * r9836;
        float r9838 = r9832 - r9837;
        float r9839 = atan2(r9829, r9838);
        float r9840 = r9821 + r9839;
        return r9840;
}

double f_od(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r9841 = lambda1;
        double r9842 = delta;
        double r9843 = sin(r9842);
        double r9844 = phi1;
        double r9845 = cos(r9844);
        double r9846 = r9843 * r9845;
        double r9847 = theta;
        double r9848 = sin(r9847);
        double r9849 = r9846 * r9848;
        double r9850 = cos(r9842);
        double r9851 = r9845 * r9845;
        double r9852 = r9850 * r9851;
        double r9853 = cos(r9847);
        double r9854 = r9853 * r9843;
        double r9855 = sin(r9844);
        double r9856 = r9855 * r9845;
        double r9857 = r9854 * r9856;
        double r9858 = r9852 - r9857;
        double r9859 = atan2(r9849, r9858);
        double r9860 = r9841 + r9859;
        return r9860;
}

void mpfr_fmod2(mpfr_t r, mpfr_t n, mpfr_t d, mpfr_rnd_t rmd) {
        mpfr_fmod(r, n, d, rmd);
        if (mpfr_cmp_ui(r, 0) < 0) mpfr_add(r, r, d, rmd);
}


static mpfr_t r9861, r9862, r9863, r9864, r9865, r9866, r9867, r9868, r9869, r9870, r9871, r9872, r9873, r9874, r9875, r9876, r9877, r9878, r9879, r9880, r9881, r9882;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9861);
        mpfr_init(r9862);
        mpfr_init(r9863);
        mpfr_init(r9864);
        mpfr_init(r9865);
        mpfr_init(r9866);
        mpfr_init(r9867);
        mpfr_init(r9868);
        mpfr_init(r9869);
        mpfr_init(r9870);
        mpfr_init(r9871);
        mpfr_init(r9872);
        mpfr_init(r9873);
        mpfr_init(r9874);
        mpfr_init(r9875);
        mpfr_init(r9876);
        mpfr_init(r9877);
        mpfr_init(r9878);
        mpfr_init(r9879);
        mpfr_init(r9880);
        mpfr_init(r9881);
        mpfr_init(r9882);
}

double f_im(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9861, lambda1, MPFR_RNDN);
        mpfr_set_d(r9862, theta, MPFR_RNDN);
        mpfr_sin(r9863, r9862, MPFR_RNDN);
        mpfr_set_d(r9864, delta, MPFR_RNDN);
        mpfr_sin(r9865, r9864, MPFR_RNDN);
        mpfr_mul(r9866, r9863, r9865, MPFR_RNDN);
        mpfr_set_d(r9867, phi1, MPFR_RNDN);
        mpfr_cos(r9868, r9867, MPFR_RNDN);
        mpfr_mul(r9869, r9866, r9868, MPFR_RNDN);
        mpfr_cos(r9870, r9864, MPFR_RNDN);
        mpfr_sin(r9871, r9867, MPFR_RNDN);
        mpfr_mul(r9872, r9871, r9870, MPFR_RNDN);
        mpfr_mul(r9873, r9868, r9865, MPFR_RNDN);
        mpfr_cos(r9874, r9862, MPFR_RNDN);
        mpfr_mul(r9875, r9873, r9874, MPFR_RNDN);
        mpfr_add(r9876, r9872, r9875, MPFR_RNDN);
        mpfr_asin(r9877, r9876, MPFR_RNDN);
        mpfr_sin(r9878, r9877, MPFR_RNDN);
        mpfr_mul(r9879, r9871, r9878, MPFR_RNDN);
        mpfr_sub(r9880, r9870, r9879, MPFR_RNDN);
        mpfr_atan2(r9881, r9869, r9880, MPFR_RNDN);
        mpfr_add(r9882, r9861, r9881, MPFR_RNDN);
        return mpfr_get_d(r9882, MPFR_RNDN);
}

static mpfr_t r9883, r9884, r9885, r9886, r9887, r9888, r9889, r9890, r9891, r9892, r9893, r9894, r9895, r9896, r9897, r9898, r9899, r9900, r9901, r9902;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9883);
        mpfr_init(r9884);
        mpfr_init(r9885);
        mpfr_init(r9886);
        mpfr_init(r9887);
        mpfr_init(r9888);
        mpfr_init(r9889);
        mpfr_init(r9890);
        mpfr_init(r9891);
        mpfr_init(r9892);
        mpfr_init(r9893);
        mpfr_init(r9894);
        mpfr_init(r9895);
        mpfr_init(r9896);
        mpfr_init(r9897);
        mpfr_init(r9898);
        mpfr_init(r9899);
        mpfr_init(r9900);
        mpfr_init(r9901);
        mpfr_init(r9902);
}

double f_fm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9883, lambda1, MPFR_RNDN);
        mpfr_set_d(r9884, delta, MPFR_RNDN);
        mpfr_sin(r9885, r9884, MPFR_RNDN);
        mpfr_set_d(r9886, phi1, MPFR_RNDN);
        mpfr_cos(r9887, r9886, MPFR_RNDN);
        mpfr_mul(r9888, r9885, r9887, MPFR_RNDN);
        mpfr_set_d(r9889, theta, MPFR_RNDN);
        mpfr_sin(r9890, r9889, MPFR_RNDN);
        mpfr_mul(r9891, r9888, r9890, MPFR_RNDN);
        mpfr_cos(r9892, r9884, MPFR_RNDN);
        mpfr_mul(r9893, r9887, r9887, MPFR_RNDN);
        mpfr_mul(r9894, r9892, r9893, MPFR_RNDN);
        mpfr_cos(r9895, r9889, MPFR_RNDN);
        mpfr_mul(r9896, r9895, r9885, MPFR_RNDN);
        mpfr_sin(r9897, r9886, MPFR_RNDN);
        mpfr_mul(r9898, r9897, r9887, MPFR_RNDN);
        mpfr_mul(r9899, r9896, r9898, MPFR_RNDN);
        mpfr_sub(r9900, r9894, r9899, MPFR_RNDN);
        mpfr_atan2(r9901, r9891, r9900, MPFR_RNDN);
        mpfr_add(r9902, r9883, r9901, MPFR_RNDN);
        return mpfr_get_d(r9902, MPFR_RNDN);
}

static mpfr_t r9903, r9904, r9905, r9906, r9907, r9908, r9909, r9910, r9911, r9912, r9913, r9914, r9915, r9916, r9917, r9918, r9919, r9920, r9921, r9922;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9903);
        mpfr_init(r9904);
        mpfr_init(r9905);
        mpfr_init(r9906);
        mpfr_init(r9907);
        mpfr_init(r9908);
        mpfr_init(r9909);
        mpfr_init(r9910);
        mpfr_init(r9911);
        mpfr_init(r9912);
        mpfr_init(r9913);
        mpfr_init(r9914);
        mpfr_init(r9915);
        mpfr_init(r9916);
        mpfr_init(r9917);
        mpfr_init(r9918);
        mpfr_init(r9919);
        mpfr_init(r9920);
        mpfr_init(r9921);
        mpfr_init(r9922);
}

double f_dm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9903, lambda1, MPFR_RNDN);
        mpfr_set_d(r9904, delta, MPFR_RNDN);
        mpfr_sin(r9905, r9904, MPFR_RNDN);
        mpfr_set_d(r9906, phi1, MPFR_RNDN);
        mpfr_cos(r9907, r9906, MPFR_RNDN);
        mpfr_mul(r9908, r9905, r9907, MPFR_RNDN);
        mpfr_set_d(r9909, theta, MPFR_RNDN);
        mpfr_sin(r9910, r9909, MPFR_RNDN);
        mpfr_mul(r9911, r9908, r9910, MPFR_RNDN);
        mpfr_cos(r9912, r9904, MPFR_RNDN);
        mpfr_mul(r9913, r9907, r9907, MPFR_RNDN);
        mpfr_mul(r9914, r9912, r9913, MPFR_RNDN);
        mpfr_cos(r9915, r9909, MPFR_RNDN);
        mpfr_mul(r9916, r9915, r9905, MPFR_RNDN);
        mpfr_sin(r9917, r9906, MPFR_RNDN);
        mpfr_mul(r9918, r9917, r9907, MPFR_RNDN);
        mpfr_mul(r9919, r9916, r9918, MPFR_RNDN);
        mpfr_sub(r9920, r9914, r9919, MPFR_RNDN);
        mpfr_atan2(r9921, r9911, r9920, MPFR_RNDN);
        mpfr_add(r9922, r9903, r9921, MPFR_RNDN);
        return mpfr_get_d(r9922, MPFR_RNDN);
}

