#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 r9690 = lambda1;
        float r9691 = theta;
        float r9692 = sin(r9691);
        float r9693 = delta;
        float r9694 = sin(r9693);
        float r9695 = r9692 * r9694;
        float r9696 = phi1;
        float r9697 = cos(r9696);
        float r9698 = r9695 * r9697;
        float r9699 = cos(r9693);
        float r9700 = sin(r9696);
        float r9701 = r9700 * r9699;
        float r9702 = r9697 * r9694;
        float r9703 = cos(r9691);
        float r9704 = r9702 * r9703;
        float r9705 = r9701 + r9704;
        float r9706 = asin(r9705);
        float r9707 = sin(r9706);
        float r9708 = r9700 * r9707;
        float r9709 = r9699 - r9708;
        float r9710 = atan2(r9698, r9709);
        float r9711 = r9690 + r9710;
        return r9711;
}

double f_id(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r9712 = lambda1;
        double r9713 = theta;
        double r9714 = sin(r9713);
        double r9715 = delta;
        double r9716 = sin(r9715);
        double r9717 = r9714 * r9716;
        double r9718 = phi1;
        double r9719 = cos(r9718);
        double r9720 = r9717 * r9719;
        double r9721 = cos(r9715);
        double r9722 = sin(r9718);
        double r9723 = r9722 * r9721;
        double r9724 = r9719 * r9716;
        double r9725 = cos(r9713);
        double r9726 = r9724 * r9725;
        double r9727 = r9723 + r9726;
        double r9728 = asin(r9727);
        double r9729 = sin(r9728);
        double r9730 = r9722 * r9729;
        double r9731 = r9721 - r9730;
        double r9732 = atan2(r9720, r9731);
        double r9733 = r9712 + r9732;
        return r9733;
}


double f_of(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r9734 = delta;
        float r9735 = sin(r9734);
        float r9736 = phi1;
        float r9737 = cos(r9736);
        float r9738 = theta;
        float r9739 = sin(r9738);
        float r9740 = r9737 * r9739;
        float r9741 = r9735 * r9740;
        float r9742 = cos(r9734);
        float r9743 = exp(r9742);
        float r9744 = r9737 * r9737;
        float r9745 = pow(r9743, r9744);
        float r9746 = log(r9745);
        float r9747 = cos(r9738);
        float r9748 = sin(r9736);
        float r9749 = r9747 * r9748;
        float r9750 = r9737 * r9735;
        float r9751 = r9749 * r9750;
        float r9752 = r9746 - r9751;
        float r9753 = atan2(r9741, r9752);
        float r9754 = lambda1;
        float r9755 = r9753 + r9754;
        return r9755;
}

double f_od(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r9756 = delta;
        double r9757 = sin(r9756);
        double r9758 = phi1;
        double r9759 = cos(r9758);
        double r9760 = theta;
        double r9761 = sin(r9760);
        double r9762 = r9759 * r9761;
        double r9763 = r9757 * r9762;
        double r9764 = cos(r9756);
        double r9765 = exp(r9764);
        double r9766 = r9759 * r9759;
        double r9767 = pow(r9765, r9766);
        double r9768 = log(r9767);
        double r9769 = cos(r9760);
        double r9770 = sin(r9758);
        double r9771 = r9769 * r9770;
        double r9772 = r9759 * r9757;
        double r9773 = r9771 * r9772;
        double r9774 = r9768 - r9773;
        double r9775 = atan2(r9763, r9774);
        double r9776 = lambda1;
        double r9777 = r9775 + r9776;
        return r9777;
}

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 r9778, r9779, r9780, r9781, r9782, r9783, r9784, r9785, r9786, r9787, r9788, r9789, r9790, r9791, r9792, r9793, r9794, r9795, r9796, r9797, r9798, r9799;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9778);
        mpfr_init(r9779);
        mpfr_init(r9780);
        mpfr_init(r9781);
        mpfr_init(r9782);
        mpfr_init(r9783);
        mpfr_init(r9784);
        mpfr_init(r9785);
        mpfr_init(r9786);
        mpfr_init(r9787);
        mpfr_init(r9788);
        mpfr_init(r9789);
        mpfr_init(r9790);
        mpfr_init(r9791);
        mpfr_init(r9792);
        mpfr_init(r9793);
        mpfr_init(r9794);
        mpfr_init(r9795);
        mpfr_init(r9796);
        mpfr_init(r9797);
        mpfr_init(r9798);
        mpfr_init(r9799);
}

double f_im(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9778, lambda1, MPFR_RNDN);
        mpfr_set_d(r9779, theta, MPFR_RNDN);
        mpfr_sin(r9780, r9779, MPFR_RNDN);
        mpfr_set_d(r9781, delta, MPFR_RNDN);
        mpfr_sin(r9782, r9781, MPFR_RNDN);
        mpfr_mul(r9783, r9780, r9782, MPFR_RNDN);
        mpfr_set_d(r9784, phi1, MPFR_RNDN);
        mpfr_cos(r9785, r9784, MPFR_RNDN);
        mpfr_mul(r9786, r9783, r9785, MPFR_RNDN);
        mpfr_cos(r9787, r9781, MPFR_RNDN);
        mpfr_sin(r9788, r9784, MPFR_RNDN);
        mpfr_mul(r9789, r9788, r9787, MPFR_RNDN);
        mpfr_mul(r9790, r9785, r9782, MPFR_RNDN);
        mpfr_cos(r9791, r9779, MPFR_RNDN);
        mpfr_mul(r9792, r9790, r9791, MPFR_RNDN);
        mpfr_add(r9793, r9789, r9792, MPFR_RNDN);
        mpfr_asin(r9794, r9793, MPFR_RNDN);
        mpfr_sin(r9795, r9794, MPFR_RNDN);
        mpfr_mul(r9796, r9788, r9795, MPFR_RNDN);
        mpfr_sub(r9797, r9787, r9796, MPFR_RNDN);
        mpfr_atan2(r9798, r9786, r9797, MPFR_RNDN);
        mpfr_add(r9799, r9778, r9798, MPFR_RNDN);
        return mpfr_get_d(r9799, MPFR_RNDN);
}

static mpfr_t r9800, r9801, r9802, r9803, r9804, r9805, r9806, r9807, r9808, r9809, r9810, r9811, r9812, r9813, r9814, r9815, r9816, r9817, r9818, r9819, r9820, r9821;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9800);
        mpfr_init(r9801);
        mpfr_init(r9802);
        mpfr_init(r9803);
        mpfr_init(r9804);
        mpfr_init(r9805);
        mpfr_init(r9806);
        mpfr_init(r9807);
        mpfr_init(r9808);
        mpfr_init(r9809);
        mpfr_init(r9810);
        mpfr_init(r9811);
        mpfr_init(r9812);
        mpfr_init(r9813);
        mpfr_init(r9814);
        mpfr_init(r9815);
        mpfr_init(r9816);
        mpfr_init(r9817);
        mpfr_init(r9818);
        mpfr_init(r9819);
        mpfr_init(r9820);
        mpfr_init(r9821);
}

double f_fm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9800, delta, MPFR_RNDN);
        mpfr_sin(r9801, r9800, MPFR_RNDN);
        mpfr_set_d(r9802, phi1, MPFR_RNDN);
        mpfr_cos(r9803, r9802, MPFR_RNDN);
        mpfr_set_d(r9804, theta, MPFR_RNDN);
        mpfr_sin(r9805, r9804, MPFR_RNDN);
        mpfr_mul(r9806, r9803, r9805, MPFR_RNDN);
        mpfr_mul(r9807, r9801, r9806, MPFR_RNDN);
        mpfr_cos(r9808, r9800, MPFR_RNDN);
        mpfr_exp(r9809, r9808, MPFR_RNDN);
        mpfr_mul(r9810, r9803, r9803, MPFR_RNDN);
        mpfr_pow(r9811, r9809, r9810, MPFR_RNDN);
        mpfr_log(r9812, r9811, MPFR_RNDN);
        mpfr_cos(r9813, r9804, MPFR_RNDN);
        mpfr_sin(r9814, r9802, MPFR_RNDN);
        mpfr_mul(r9815, r9813, r9814, MPFR_RNDN);
        mpfr_mul(r9816, r9803, r9801, MPFR_RNDN);
        mpfr_mul(r9817, r9815, r9816, MPFR_RNDN);
        mpfr_sub(r9818, r9812, r9817, MPFR_RNDN);
        mpfr_atan2(r9819, r9807, r9818, MPFR_RNDN);
        mpfr_set_d(r9820, lambda1, MPFR_RNDN);
        mpfr_add(r9821, r9819, r9820, MPFR_RNDN);
        return mpfr_get_d(r9821, MPFR_RNDN);
}

static mpfr_t r9822, r9823, r9824, r9825, r9826, r9827, r9828, r9829, r9830, r9831, r9832, r9833, r9834, r9835, r9836, r9837, r9838, r9839, r9840, r9841, r9842, r9843;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9822);
        mpfr_init(r9823);
        mpfr_init(r9824);
        mpfr_init(r9825);
        mpfr_init(r9826);
        mpfr_init(r9827);
        mpfr_init(r9828);
        mpfr_init(r9829);
        mpfr_init(r9830);
        mpfr_init(r9831);
        mpfr_init(r9832);
        mpfr_init(r9833);
        mpfr_init(r9834);
        mpfr_init(r9835);
        mpfr_init(r9836);
        mpfr_init(r9837);
        mpfr_init(r9838);
        mpfr_init(r9839);
        mpfr_init(r9840);
        mpfr_init(r9841);
        mpfr_init(r9842);
        mpfr_init(r9843);
}

double f_dm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9822, delta, MPFR_RNDN);
        mpfr_sin(r9823, r9822, MPFR_RNDN);
        mpfr_set_d(r9824, phi1, MPFR_RNDN);
        mpfr_cos(r9825, r9824, MPFR_RNDN);
        mpfr_set_d(r9826, theta, MPFR_RNDN);
        mpfr_sin(r9827, r9826, MPFR_RNDN);
        mpfr_mul(r9828, r9825, r9827, MPFR_RNDN);
        mpfr_mul(r9829, r9823, r9828, MPFR_RNDN);
        mpfr_cos(r9830, r9822, MPFR_RNDN);
        mpfr_exp(r9831, r9830, MPFR_RNDN);
        mpfr_mul(r9832, r9825, r9825, MPFR_RNDN);
        mpfr_pow(r9833, r9831, r9832, MPFR_RNDN);
        mpfr_log(r9834, r9833, MPFR_RNDN);
        mpfr_cos(r9835, r9826, MPFR_RNDN);
        mpfr_sin(r9836, r9824, MPFR_RNDN);
        mpfr_mul(r9837, r9835, r9836, MPFR_RNDN);
        mpfr_mul(r9838, r9825, r9823, MPFR_RNDN);
        mpfr_mul(r9839, r9837, r9838, MPFR_RNDN);
        mpfr_sub(r9840, r9834, r9839, MPFR_RNDN);
        mpfr_atan2(r9841, r9829, r9840, MPFR_RNDN);
        mpfr_set_d(r9842, lambda1, MPFR_RNDN);
        mpfr_add(r9843, r9841, r9842, MPFR_RNDN);
        return mpfr_get_d(r9843, MPFR_RNDN);
}

