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

char *name = "Distance on a great circle";

double f_if(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r33592 = R;
        float r33593 = 2;
        float r33594 = phi1;
        float r33595 = phi2;
        float r33596 = r33594 - r33595;
        float r33597 = r33596 / r33593;
        float r33598 = sin(r33597);
        float r33599 = pow(r33598, r33593);
        float r33600 = cos(r33594);
        float r33601 = cos(r33595);
        float r33602 = r33600 * r33601;
        float r33603 = lambda1;
        float r33604 = lambda2;
        float r33605 = r33603 - r33604;
        float r33606 = r33605 / r33593;
        float r33607 = sin(r33606);
        float r33608 = r33602 * r33607;
        float r33609 = r33608 * r33607;
        float r33610 = r33599 + r33609;
        float r33611 = sqrt(r33610);
        float r33612 = 1;
        float r33613 = r33612 - r33610;
        float r33614 = sqrt(r33613);
        float r33615 = atan2(r33611, r33614);
        float r33616 = r33593 * r33615;
        float r33617 = r33592 * r33616;
        return r33617;
}

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r33618 = R;
        double r33619 = 2;
        double r33620 = phi1;
        double r33621 = phi2;
        double r33622 = r33620 - r33621;
        double r33623 = r33622 / r33619;
        double r33624 = sin(r33623);
        double r33625 = pow(r33624, r33619);
        double r33626 = cos(r33620);
        double r33627 = cos(r33621);
        double r33628 = r33626 * r33627;
        double r33629 = lambda1;
        double r33630 = lambda2;
        double r33631 = r33629 - r33630;
        double r33632 = r33631 / r33619;
        double r33633 = sin(r33632);
        double r33634 = r33628 * r33633;
        double r33635 = r33634 * r33633;
        double r33636 = r33625 + r33635;
        double r33637 = sqrt(r33636);
        double r33638 = 1;
        double r33639 = r33638 - r33636;
        double r33640 = sqrt(r33639);
        double r33641 = atan2(r33637, r33640);
        double r33642 = r33619 * r33641;
        double r33643 = r33618 * r33642;
        return r33643;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r33644 = R;
        float r33645 = 2;
        float r33646 = phi1;
        float r33647 = r33646 / r33645;
        float r33648 = sin(r33647);
        float r33649 = phi2;
        float r33650 = r33649 / r33645;
        float r33651 = cos(r33650);
        float r33652 = r33648 * r33651;
        float r33653 = cos(r33647);
        float r33654 = sin(r33650);
        float r33655 = r33653 * r33654;
        float r33656 = r33652 - r33655;
        float r33657 = pow(r33656, r33645);
        float r33658 = cos(r33646);
        float r33659 = cos(r33649);
        float r33660 = r33658 * r33659;
        float r33661 = lambda1;
        float r33662 = lambda2;
        float r33663 = r33661 - r33662;
        float r33664 = r33663 / r33645;
        float r33665 = sin(r33664);
        float r33666 = r33660 * r33665;
        float r33667 = 3;
        float r33668 = pow(r33665, r33667);
        float r33669 = cbrt(r33668);
        float r33670 = r33666 * r33669;
        float r33671 = r33657 + r33670;
        float r33672 = sqrt(r33671);
        float r33673 = 1;
        float r33674 = r33666 * r33665;
        float r33675 = r33657 + r33674;
        float r33676 = r33673 - r33675;
        float r33677 = sqrt(r33676);
        float r33678 = atan2(r33672, r33677);
        float r33679 = r33645 * r33678;
        float r33680 = r33644 * r33679;
        return r33680;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r33681 = R;
        double r33682 = 2;
        double r33683 = phi1;
        double r33684 = r33683 / r33682;
        double r33685 = sin(r33684);
        double r33686 = phi2;
        double r33687 = r33686 / r33682;
        double r33688 = cos(r33687);
        double r33689 = r33685 * r33688;
        double r33690 = cos(r33684);
        double r33691 = sin(r33687);
        double r33692 = r33690 * r33691;
        double r33693 = r33689 - r33692;
        double r33694 = pow(r33693, r33682);
        double r33695 = cos(r33683);
        double r33696 = cos(r33686);
        double r33697 = r33695 * r33696;
        double r33698 = lambda1;
        double r33699 = lambda2;
        double r33700 = r33698 - r33699;
        double r33701 = r33700 / r33682;
        double r33702 = sin(r33701);
        double r33703 = r33697 * r33702;
        double r33704 = 3;
        double r33705 = pow(r33702, r33704);
        double r33706 = cbrt(r33705);
        double r33707 = r33703 * r33706;
        double r33708 = r33694 + r33707;
        double r33709 = sqrt(r33708);
        double r33710 = 1;
        double r33711 = r33703 * r33702;
        double r33712 = r33694 + r33711;
        double r33713 = r33710 - r33712;
        double r33714 = sqrt(r33713);
        double r33715 = atan2(r33709, r33714);
        double r33716 = r33682 * r33715;
        double r33717 = r33681 * r33716;
        return r33717;
}

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 r33718, r33719, r33720, r33721, r33722, r33723, r33724, r33725, r33726, r33727, r33728, r33729, r33730, r33731, r33732, r33733, r33734, r33735, r33736, r33737, r33738, r33739, r33740, r33741, r33742, r33743;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r33718);
        mpfr_init_set_str(r33719, "2", 10, MPFR_RNDN);
        mpfr_init(r33720);
        mpfr_init(r33721);
        mpfr_init(r33722);
        mpfr_init(r33723);
        mpfr_init(r33724);
        mpfr_init(r33725);
        mpfr_init(r33726);
        mpfr_init(r33727);
        mpfr_init(r33728);
        mpfr_init(r33729);
        mpfr_init(r33730);
        mpfr_init(r33731);
        mpfr_init(r33732);
        mpfr_init(r33733);
        mpfr_init(r33734);
        mpfr_init(r33735);
        mpfr_init(r33736);
        mpfr_init(r33737);
        mpfr_init_set_str(r33738, "1", 10, MPFR_RNDN);
        mpfr_init(r33739);
        mpfr_init(r33740);
        mpfr_init(r33741);
        mpfr_init(r33742);
        mpfr_init(r33743);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r33718, R, MPFR_RNDN);
        ;
        mpfr_set_d(r33720, phi1, MPFR_RNDN);
        mpfr_set_d(r33721, phi2, MPFR_RNDN);
        mpfr_sub(r33722, r33720, r33721, MPFR_RNDN);
        mpfr_div(r33723, r33722, r33719, MPFR_RNDN);
        mpfr_sin(r33724, r33723, MPFR_RNDN);
        mpfr_pow(r33725, r33724, r33719, MPFR_RNDN);
        mpfr_cos(r33726, r33720, MPFR_RNDN);
        mpfr_cos(r33727, r33721, MPFR_RNDN);
        mpfr_mul(r33728, r33726, r33727, MPFR_RNDN);
        mpfr_set_d(r33729, lambda1, MPFR_RNDN);
        mpfr_set_d(r33730, lambda2, MPFR_RNDN);
        mpfr_sub(r33731, r33729, r33730, MPFR_RNDN);
        mpfr_div(r33732, r33731, r33719, MPFR_RNDN);
        mpfr_sin(r33733, r33732, MPFR_RNDN);
        mpfr_mul(r33734, r33728, r33733, MPFR_RNDN);
        mpfr_mul(r33735, r33734, r33733, MPFR_RNDN);
        mpfr_add(r33736, r33725, r33735, MPFR_RNDN);
        mpfr_sqrt(r33737, r33736, MPFR_RNDN);
        ;
        mpfr_sub(r33739, r33738, r33736, MPFR_RNDN);
        mpfr_sqrt(r33740, r33739, MPFR_RNDN);
        mpfr_atan2(r33741, r33737, r33740, MPFR_RNDN);
        mpfr_mul(r33742, r33719, r33741, MPFR_RNDN);
        mpfr_mul(r33743, r33718, r33742, MPFR_RNDN);
        return mpfr_get_d(r33743, MPFR_RNDN);
}

static mpfr_t r33744, r33745, r33746, r33747, r33748, r33749, r33750, r33751, r33752, r33753, r33754, r33755, r33756, r33757, r33758, r33759, r33760, r33761, r33762, r33763, r33764, r33765, r33766, r33767, r33768, r33769, r33770, r33771, r33772, r33773, r33774, r33775, r33776, r33777, r33778, r33779, r33780;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r33744);
        mpfr_init_set_str(r33745, "2", 10, MPFR_RNDN);
        mpfr_init(r33746);
        mpfr_init(r33747);
        mpfr_init(r33748);
        mpfr_init(r33749);
        mpfr_init(r33750);
        mpfr_init(r33751);
        mpfr_init(r33752);
        mpfr_init(r33753);
        mpfr_init(r33754);
        mpfr_init(r33755);
        mpfr_init(r33756);
        mpfr_init(r33757);
        mpfr_init(r33758);
        mpfr_init(r33759);
        mpfr_init(r33760);
        mpfr_init(r33761);
        mpfr_init(r33762);
        mpfr_init(r33763);
        mpfr_init(r33764);
        mpfr_init(r33765);
        mpfr_init(r33766);
        mpfr_init_set_str(r33767, "3", 10, MPFR_RNDN);
        mpfr_init(r33768);
        mpfr_init(r33769);
        mpfr_init(r33770);
        mpfr_init(r33771);
        mpfr_init(r33772);
        mpfr_init_set_str(r33773, "1", 10, MPFR_RNDN);
        mpfr_init(r33774);
        mpfr_init(r33775);
        mpfr_init(r33776);
        mpfr_init(r33777);
        mpfr_init(r33778);
        mpfr_init(r33779);
        mpfr_init(r33780);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r33744, R, MPFR_RNDN);
        ;
        mpfr_set_d(r33746, phi1, MPFR_RNDN);
        mpfr_div(r33747, r33746, r33745, MPFR_RNDN);
        mpfr_sin(r33748, r33747, MPFR_RNDN);
        mpfr_set_d(r33749, phi2, MPFR_RNDN);
        mpfr_div(r33750, r33749, r33745, MPFR_RNDN);
        mpfr_cos(r33751, r33750, MPFR_RNDN);
        mpfr_mul(r33752, r33748, r33751, MPFR_RNDN);
        mpfr_cos(r33753, r33747, MPFR_RNDN);
        mpfr_sin(r33754, r33750, MPFR_RNDN);
        mpfr_mul(r33755, r33753, r33754, MPFR_RNDN);
        mpfr_sub(r33756, r33752, r33755, MPFR_RNDN);
        mpfr_pow(r33757, r33756, r33745, MPFR_RNDN);
        mpfr_cos(r33758, r33746, MPFR_RNDN);
        mpfr_cos(r33759, r33749, MPFR_RNDN);
        mpfr_mul(r33760, r33758, r33759, MPFR_RNDN);
        mpfr_set_d(r33761, lambda1, MPFR_RNDN);
        mpfr_set_d(r33762, lambda2, MPFR_RNDN);
        mpfr_sub(r33763, r33761, r33762, MPFR_RNDN);
        mpfr_div(r33764, r33763, r33745, MPFR_RNDN);
        mpfr_sin(r33765, r33764, MPFR_RNDN);
        mpfr_mul(r33766, r33760, r33765, MPFR_RNDN);
        ;
        mpfr_pow(r33768, r33765, r33767, MPFR_RNDN);
        mpfr_cbrt(r33769, r33768, MPFR_RNDN);
        mpfr_mul(r33770, r33766, r33769, MPFR_RNDN);
        mpfr_add(r33771, r33757, r33770, MPFR_RNDN);
        mpfr_sqrt(r33772, r33771, MPFR_RNDN);
        ;
        mpfr_mul(r33774, r33766, r33765, MPFR_RNDN);
        mpfr_add(r33775, r33757, r33774, MPFR_RNDN);
        mpfr_sub(r33776, r33773, r33775, MPFR_RNDN);
        mpfr_sqrt(r33777, r33776, MPFR_RNDN);
        mpfr_atan2(r33778, r33772, r33777, MPFR_RNDN);
        mpfr_mul(r33779, r33745, r33778, MPFR_RNDN);
        mpfr_mul(r33780, r33744, r33779, MPFR_RNDN);
        return mpfr_get_d(r33780, MPFR_RNDN);
}

static mpfr_t r33781, r33782, r33783, r33784, r33785, r33786, r33787, r33788, r33789, r33790, r33791, r33792, r33793, r33794, r33795, r33796, r33797, r33798, r33799, r33800, r33801, r33802, r33803, r33804, r33805, r33806, r33807, r33808, r33809, r33810, r33811, r33812, r33813, r33814, r33815, r33816, r33817;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r33781);
        mpfr_init_set_str(r33782, "2", 10, MPFR_RNDN);
        mpfr_init(r33783);
        mpfr_init(r33784);
        mpfr_init(r33785);
        mpfr_init(r33786);
        mpfr_init(r33787);
        mpfr_init(r33788);
        mpfr_init(r33789);
        mpfr_init(r33790);
        mpfr_init(r33791);
        mpfr_init(r33792);
        mpfr_init(r33793);
        mpfr_init(r33794);
        mpfr_init(r33795);
        mpfr_init(r33796);
        mpfr_init(r33797);
        mpfr_init(r33798);
        mpfr_init(r33799);
        mpfr_init(r33800);
        mpfr_init(r33801);
        mpfr_init(r33802);
        mpfr_init(r33803);
        mpfr_init_set_str(r33804, "3", 10, MPFR_RNDN);
        mpfr_init(r33805);
        mpfr_init(r33806);
        mpfr_init(r33807);
        mpfr_init(r33808);
        mpfr_init(r33809);
        mpfr_init_set_str(r33810, "1", 10, MPFR_RNDN);
        mpfr_init(r33811);
        mpfr_init(r33812);
        mpfr_init(r33813);
        mpfr_init(r33814);
        mpfr_init(r33815);
        mpfr_init(r33816);
        mpfr_init(r33817);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r33781, R, MPFR_RNDN);
        ;
        mpfr_set_d(r33783, phi1, MPFR_RNDN);
        mpfr_div(r33784, r33783, r33782, MPFR_RNDN);
        mpfr_sin(r33785, r33784, MPFR_RNDN);
        mpfr_set_d(r33786, phi2, MPFR_RNDN);
        mpfr_div(r33787, r33786, r33782, MPFR_RNDN);
        mpfr_cos(r33788, r33787, MPFR_RNDN);
        mpfr_mul(r33789, r33785, r33788, MPFR_RNDN);
        mpfr_cos(r33790, r33784, MPFR_RNDN);
        mpfr_sin(r33791, r33787, MPFR_RNDN);
        mpfr_mul(r33792, r33790, r33791, MPFR_RNDN);
        mpfr_sub(r33793, r33789, r33792, MPFR_RNDN);
        mpfr_pow(r33794, r33793, r33782, MPFR_RNDN);
        mpfr_cos(r33795, r33783, MPFR_RNDN);
        mpfr_cos(r33796, r33786, MPFR_RNDN);
        mpfr_mul(r33797, r33795, r33796, MPFR_RNDN);
        mpfr_set_d(r33798, lambda1, MPFR_RNDN);
        mpfr_set_d(r33799, lambda2, MPFR_RNDN);
        mpfr_sub(r33800, r33798, r33799, MPFR_RNDN);
        mpfr_div(r33801, r33800, r33782, MPFR_RNDN);
        mpfr_sin(r33802, r33801, MPFR_RNDN);
        mpfr_mul(r33803, r33797, r33802, MPFR_RNDN);
        ;
        mpfr_pow(r33805, r33802, r33804, MPFR_RNDN);
        mpfr_cbrt(r33806, r33805, MPFR_RNDN);
        mpfr_mul(r33807, r33803, r33806, MPFR_RNDN);
        mpfr_add(r33808, r33794, r33807, MPFR_RNDN);
        mpfr_sqrt(r33809, r33808, MPFR_RNDN);
        ;
        mpfr_mul(r33811, r33803, r33802, MPFR_RNDN);
        mpfr_add(r33812, r33794, r33811, MPFR_RNDN);
        mpfr_sub(r33813, r33810, r33812, MPFR_RNDN);
        mpfr_sqrt(r33814, r33813, MPFR_RNDN);
        mpfr_atan2(r33815, r33809, r33814, MPFR_RNDN);
        mpfr_mul(r33816, r33782, r33815, MPFR_RNDN);
        mpfr_mul(r33817, r33781, r33816, MPFR_RNDN);
        return mpfr_get_d(r33817, MPFR_RNDN);
}

