#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 r9614 = lambda1;
        float r9615 = theta;
        float r9616 = sin(r9615);
        float r9617 = delta;
        float r9618 = sin(r9617);
        float r9619 = r9616 * r9618;
        float r9620 = phi1;
        float r9621 = cos(r9620);
        float r9622 = r9619 * r9621;
        float r9623 = cos(r9617);
        float r9624 = sin(r9620);
        float r9625 = r9624 * r9623;
        float r9626 = r9621 * r9618;
        float r9627 = cos(r9615);
        float r9628 = r9626 * r9627;
        float r9629 = r9625 + r9628;
        float r9630 = asin(r9629);
        float r9631 = sin(r9630);
        float r9632 = r9624 * r9631;
        float r9633 = r9623 - r9632;
        float r9634 = atan2(r9622, r9633);
        float r9635 = r9614 + r9634;
        return r9635;
}

double f_id(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r9636 = lambda1;
        double r9637 = theta;
        double r9638 = sin(r9637);
        double r9639 = delta;
        double r9640 = sin(r9639);
        double r9641 = r9638 * r9640;
        double r9642 = phi1;
        double r9643 = cos(r9642);
        double r9644 = r9641 * r9643;
        double r9645 = cos(r9639);
        double r9646 = sin(r9642);
        double r9647 = r9646 * r9645;
        double r9648 = r9643 * r9640;
        double r9649 = cos(r9637);
        double r9650 = r9648 * r9649;
        double r9651 = r9647 + r9650;
        double r9652 = asin(r9651);
        double r9653 = sin(r9652);
        double r9654 = r9646 * r9653;
        double r9655 = r9645 - r9654;
        double r9656 = atan2(r9644, r9655);
        double r9657 = r9636 + r9656;
        return r9657;
}


double f_of(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r9658 = lambda1;
        float r9659 = theta;
        float r9660 = sin(r9659);
        float r9661 = delta;
        float r9662 = sin(r9661);
        float r9663 = r9660 * r9662;
        float r9664 = phi1;
        float r9665 = cos(r9664);
        float r9666 = r9663 * r9665;
        float r9667 = cos(r9661);
        float r9668 = 3;
        float r9669 = pow(r9667, r9668);
        float r9670 = sin(r9664);
        float r9671 = pow(r9670, r9668);
        float r9672 = r9670 * r9667;
        float r9673 = r9665 * r9662;
        float r9674 = cos(r9659);
        float r9675 = r9673 * r9674;
        float r9676 = r9672 + r9675;
        float r9677 = asin(r9676);
        float r9678 = sin(r9677);
        float r9679 = pow(r9678, r9668);
        float r9680 = r9671 * r9679;
        float r9681 = r9669 - r9680;
        float r9682 = r9667 * r9667;
        float r9683 = r9670 * r9678;
        float r9684 = r9683 * r9683;
        float r9685 = cbrt(r9684);
        float r9686 = r9685 * r9685;
        float r9687 = r9686 * r9685;
        float r9688 = r9667 * r9683;
        float r9689 = r9687 + r9688;
        float r9690 = r9682 + r9689;
        float r9691 = r9681 / r9690;
        float r9692 = atan2(r9666, r9691);
        float r9693 = r9658 + r9692;
        return r9693;
}

double f_od(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r9694 = lambda1;
        double r9695 = theta;
        double r9696 = sin(r9695);
        double r9697 = delta;
        double r9698 = sin(r9697);
        double r9699 = r9696 * r9698;
        double r9700 = phi1;
        double r9701 = cos(r9700);
        double r9702 = r9699 * r9701;
        double r9703 = cos(r9697);
        double r9704 = 3;
        double r9705 = pow(r9703, r9704);
        double r9706 = sin(r9700);
        double r9707 = pow(r9706, r9704);
        double r9708 = r9706 * r9703;
        double r9709 = r9701 * r9698;
        double r9710 = cos(r9695);
        double r9711 = r9709 * r9710;
        double r9712 = r9708 + r9711;
        double r9713 = asin(r9712);
        double r9714 = sin(r9713);
        double r9715 = pow(r9714, r9704);
        double r9716 = r9707 * r9715;
        double r9717 = r9705 - r9716;
        double r9718 = r9703 * r9703;
        double r9719 = r9706 * r9714;
        double r9720 = r9719 * r9719;
        double r9721 = cbrt(r9720);
        double r9722 = r9721 * r9721;
        double r9723 = r9722 * r9721;
        double r9724 = r9703 * r9719;
        double r9725 = r9723 + r9724;
        double r9726 = r9718 + r9725;
        double r9727 = r9717 / r9726;
        double r9728 = atan2(r9702, r9727);
        double r9729 = r9694 + r9728;
        return r9729;
}

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 r9730, r9731, r9732, r9733, r9734, r9735, r9736, r9737, r9738, r9739, r9740, r9741, r9742, r9743, r9744, r9745, r9746, r9747, r9748, r9749, r9750, r9751;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9730);
        mpfr_init(r9731);
        mpfr_init(r9732);
        mpfr_init(r9733);
        mpfr_init(r9734);
        mpfr_init(r9735);
        mpfr_init(r9736);
        mpfr_init(r9737);
        mpfr_init(r9738);
        mpfr_init(r9739);
        mpfr_init(r9740);
        mpfr_init(r9741);
        mpfr_init(r9742);
        mpfr_init(r9743);
        mpfr_init(r9744);
        mpfr_init(r9745);
        mpfr_init(r9746);
        mpfr_init(r9747);
        mpfr_init(r9748);
        mpfr_init(r9749);
        mpfr_init(r9750);
        mpfr_init(r9751);
}

double f_im(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9730, lambda1, MPFR_RNDN);
        mpfr_set_d(r9731, theta, MPFR_RNDN);
        mpfr_sin(r9732, r9731, MPFR_RNDN);
        mpfr_set_d(r9733, delta, MPFR_RNDN);
        mpfr_sin(r9734, r9733, MPFR_RNDN);
        mpfr_mul(r9735, r9732, r9734, MPFR_RNDN);
        mpfr_set_d(r9736, phi1, MPFR_RNDN);
        mpfr_cos(r9737, r9736, MPFR_RNDN);
        mpfr_mul(r9738, r9735, r9737, MPFR_RNDN);
        mpfr_cos(r9739, r9733, MPFR_RNDN);
        mpfr_sin(r9740, r9736, MPFR_RNDN);
        mpfr_mul(r9741, r9740, r9739, MPFR_RNDN);
        mpfr_mul(r9742, r9737, r9734, MPFR_RNDN);
        mpfr_cos(r9743, r9731, MPFR_RNDN);
        mpfr_mul(r9744, r9742, r9743, MPFR_RNDN);
        mpfr_add(r9745, r9741, r9744, MPFR_RNDN);
        mpfr_asin(r9746, r9745, MPFR_RNDN);
        mpfr_sin(r9747, r9746, MPFR_RNDN);
        mpfr_mul(r9748, r9740, r9747, MPFR_RNDN);
        mpfr_sub(r9749, r9739, r9748, MPFR_RNDN);
        mpfr_atan2(r9750, r9738, r9749, MPFR_RNDN);
        mpfr_add(r9751, r9730, r9750, MPFR_RNDN);
        return mpfr_get_d(r9751, MPFR_RNDN);
}

static mpfr_t r9752, r9753, r9754, r9755, r9756, r9757, r9758, r9759, r9760, r9761, r9762, r9763, r9764, r9765, r9766, r9767, r9768, r9769, r9770, r9771, r9772, r9773, r9774, r9775, r9776, r9777, r9778, r9779, r9780, r9781, r9782, r9783, r9784, r9785, r9786, r9787;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9752);
        mpfr_init(r9753);
        mpfr_init(r9754);
        mpfr_init(r9755);
        mpfr_init(r9756);
        mpfr_init(r9757);
        mpfr_init(r9758);
        mpfr_init(r9759);
        mpfr_init(r9760);
        mpfr_init(r9761);
        mpfr_init_set_str(r9762, "3", 10, MPFR_RNDN);
        mpfr_init(r9763);
        mpfr_init(r9764);
        mpfr_init(r9765);
        mpfr_init(r9766);
        mpfr_init(r9767);
        mpfr_init(r9768);
        mpfr_init(r9769);
        mpfr_init(r9770);
        mpfr_init(r9771);
        mpfr_init(r9772);
        mpfr_init(r9773);
        mpfr_init(r9774);
        mpfr_init(r9775);
        mpfr_init(r9776);
        mpfr_init(r9777);
        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);
}

double f_fm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9752, lambda1, MPFR_RNDN);
        mpfr_set_d(r9753, theta, MPFR_RNDN);
        mpfr_sin(r9754, r9753, MPFR_RNDN);
        mpfr_set_d(r9755, delta, MPFR_RNDN);
        mpfr_sin(r9756, r9755, MPFR_RNDN);
        mpfr_mul(r9757, r9754, r9756, MPFR_RNDN);
        mpfr_set_d(r9758, phi1, MPFR_RNDN);
        mpfr_cos(r9759, r9758, MPFR_RNDN);
        mpfr_mul(r9760, r9757, r9759, MPFR_RNDN);
        mpfr_cos(r9761, r9755, MPFR_RNDN);
        ;
        mpfr_pow(r9763, r9761, r9762, MPFR_RNDN);
        mpfr_sin(r9764, r9758, MPFR_RNDN);
        mpfr_pow(r9765, r9764, r9762, MPFR_RNDN);
        mpfr_mul(r9766, r9764, r9761, MPFR_RNDN);
        mpfr_mul(r9767, r9759, r9756, MPFR_RNDN);
        mpfr_cos(r9768, r9753, MPFR_RNDN);
        mpfr_mul(r9769, r9767, r9768, MPFR_RNDN);
        mpfr_add(r9770, r9766, r9769, MPFR_RNDN);
        mpfr_asin(r9771, r9770, MPFR_RNDN);
        mpfr_sin(r9772, r9771, MPFR_RNDN);
        mpfr_pow(r9773, r9772, r9762, MPFR_RNDN);
        mpfr_mul(r9774, r9765, r9773, MPFR_RNDN);
        mpfr_sub(r9775, r9763, r9774, MPFR_RNDN);
        mpfr_mul(r9776, r9761, r9761, MPFR_RNDN);
        mpfr_mul(r9777, r9764, r9772, MPFR_RNDN);
        mpfr_mul(r9778, r9777, r9777, MPFR_RNDN);
        mpfr_cbrt(r9779, r9778, MPFR_RNDN);
        mpfr_mul(r9780, r9779, r9779, MPFR_RNDN);
        mpfr_mul(r9781, r9780, r9779, MPFR_RNDN);
        mpfr_mul(r9782, r9761, r9777, MPFR_RNDN);
        mpfr_add(r9783, r9781, r9782, MPFR_RNDN);
        mpfr_add(r9784, r9776, r9783, MPFR_RNDN);
        mpfr_div(r9785, r9775, r9784, MPFR_RNDN);
        mpfr_atan2(r9786, r9760, r9785, MPFR_RNDN);
        mpfr_add(r9787, r9752, r9786, MPFR_RNDN);
        return mpfr_get_d(r9787, MPFR_RNDN);
}

static mpfr_t r9788, r9789, r9790, r9791, r9792, r9793, r9794, r9795, r9796, r9797, r9798, r9799, r9800, r9801, r9802, r9803, r9804, r9805, r9806, r9807, r9808, r9809, r9810, r9811, r9812, r9813, r9814, r9815, r9816, r9817, r9818, r9819, r9820, r9821, r9822, r9823;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        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_set_str(r9798, "3", 10, MPFR_RNDN);
        mpfr_init(r9799);
        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);
        mpfr_init(r9822);
        mpfr_init(r9823);
}

double f_dm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9788, lambda1, MPFR_RNDN);
        mpfr_set_d(r9789, theta, MPFR_RNDN);
        mpfr_sin(r9790, r9789, MPFR_RNDN);
        mpfr_set_d(r9791, delta, MPFR_RNDN);
        mpfr_sin(r9792, r9791, MPFR_RNDN);
        mpfr_mul(r9793, r9790, r9792, MPFR_RNDN);
        mpfr_set_d(r9794, phi1, MPFR_RNDN);
        mpfr_cos(r9795, r9794, MPFR_RNDN);
        mpfr_mul(r9796, r9793, r9795, MPFR_RNDN);
        mpfr_cos(r9797, r9791, MPFR_RNDN);
        ;
        mpfr_pow(r9799, r9797, r9798, MPFR_RNDN);
        mpfr_sin(r9800, r9794, MPFR_RNDN);
        mpfr_pow(r9801, r9800, r9798, MPFR_RNDN);
        mpfr_mul(r9802, r9800, r9797, MPFR_RNDN);
        mpfr_mul(r9803, r9795, r9792, MPFR_RNDN);
        mpfr_cos(r9804, r9789, MPFR_RNDN);
        mpfr_mul(r9805, r9803, r9804, MPFR_RNDN);
        mpfr_add(r9806, r9802, r9805, MPFR_RNDN);
        mpfr_asin(r9807, r9806, MPFR_RNDN);
        mpfr_sin(r9808, r9807, MPFR_RNDN);
        mpfr_pow(r9809, r9808, r9798, MPFR_RNDN);
        mpfr_mul(r9810, r9801, r9809, MPFR_RNDN);
        mpfr_sub(r9811, r9799, r9810, MPFR_RNDN);
        mpfr_mul(r9812, r9797, r9797, MPFR_RNDN);
        mpfr_mul(r9813, r9800, r9808, MPFR_RNDN);
        mpfr_mul(r9814, r9813, r9813, MPFR_RNDN);
        mpfr_cbrt(r9815, r9814, MPFR_RNDN);
        mpfr_mul(r9816, r9815, r9815, MPFR_RNDN);
        mpfr_mul(r9817, r9816, r9815, MPFR_RNDN);
        mpfr_mul(r9818, r9797, r9813, MPFR_RNDN);
        mpfr_add(r9819, r9817, r9818, MPFR_RNDN);
        mpfr_add(r9820, r9812, r9819, MPFR_RNDN);
        mpfr_div(r9821, r9811, r9820, MPFR_RNDN);
        mpfr_atan2(r9822, r9796, r9821, MPFR_RNDN);
        mpfr_add(r9823, r9788, r9822, MPFR_RNDN);
        return mpfr_get_d(r9823, MPFR_RNDN);
}

