#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 r25518 = R;
        float r25519 = 2;
        float r25520 = phi1;
        float r25521 = phi2;
        float r25522 = r25520 - r25521;
        float r25523 = r25522 / r25519;
        float r25524 = sin(r25523);
        float r25525 = pow(r25524, r25519);
        float r25526 = cos(r25520);
        float r25527 = cos(r25521);
        float r25528 = r25526 * r25527;
        float r25529 = lambda1;
        float r25530 = lambda2;
        float r25531 = r25529 - r25530;
        float r25532 = r25531 / r25519;
        float r25533 = sin(r25532);
        float r25534 = r25528 * r25533;
        float r25535 = r25534 * r25533;
        float r25536 = r25525 + r25535;
        float r25537 = sqrt(r25536);
        float r25538 = 1;
        float r25539 = r25538 - r25536;
        float r25540 = sqrt(r25539);
        float r25541 = atan2(r25537, r25540);
        float r25542 = r25519 * r25541;
        float r25543 = r25518 * r25542;
        return r25543;
}

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25544 = R;
        double r25545 = 2;
        double r25546 = phi1;
        double r25547 = phi2;
        double r25548 = r25546 - r25547;
        double r25549 = r25548 / r25545;
        double r25550 = sin(r25549);
        double r25551 = pow(r25550, r25545);
        double r25552 = cos(r25546);
        double r25553 = cos(r25547);
        double r25554 = r25552 * r25553;
        double r25555 = lambda1;
        double r25556 = lambda2;
        double r25557 = r25555 - r25556;
        double r25558 = r25557 / r25545;
        double r25559 = sin(r25558);
        double r25560 = r25554 * r25559;
        double r25561 = r25560 * r25559;
        double r25562 = r25551 + r25561;
        double r25563 = sqrt(r25562);
        double r25564 = 1;
        double r25565 = r25564 - r25562;
        double r25566 = sqrt(r25565);
        double r25567 = atan2(r25563, r25566);
        double r25568 = r25545 * r25567;
        double r25569 = r25544 * r25568;
        return r25569;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r25570 = R;
        float r25571 = 2;
        float r25572 = phi1;
        float r25573 = r25572 / r25571;
        float r25574 = sin(r25573);
        float r25575 = phi2;
        float r25576 = r25575 / r25571;
        float r25577 = cos(r25576);
        float r25578 = r25574 * r25577;
        float r25579 = cos(r25573);
        float r25580 = sin(r25576);
        float r25581 = r25579 * r25580;
        float r25582 = r25578 - r25581;
        float r25583 = pow(r25582, r25571);
        float r25584 = cos(r25572);
        float r25585 = cos(r25575);
        float r25586 = r25584 * r25585;
        float r25587 = lambda1;
        float r25588 = lambda2;
        float r25589 = r25587 - r25588;
        float r25590 = r25589 / r25571;
        float r25591 = sin(r25590);
        float r25592 = r25586 * r25591;
        float r25593 = r25592 * r25591;
        float r25594 = r25583 + r25593;
        float r25595 = sqrt(r25594);
        float r25596 = 1;
        float r25597 = r25587 / r25571;
        float r25598 = sin(r25597);
        float r25599 = r25588 / r25571;
        float r25600 = cos(r25599);
        float r25601 = r25598 * r25600;
        float r25602 = cos(r25597);
        float r25603 = sin(r25599);
        float r25604 = r25602 * r25603;
        float r25605 = r25601 - r25604;
        float r25606 = r25586 * r25605;
        float r25607 = r25606 * r25605;
        float r25608 = r25583 + r25607;
        float r25609 = r25596 - r25608;
        float r25610 = sqrt(r25609);
        float r25611 = atan2(r25595, r25610);
        float r25612 = r25571 * r25611;
        float r25613 = r25570 * r25612;
        return r25613;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25614 = R;
        double r25615 = 2;
        double r25616 = phi1;
        double r25617 = r25616 / r25615;
        double r25618 = sin(r25617);
        double r25619 = phi2;
        double r25620 = r25619 / r25615;
        double r25621 = cos(r25620);
        double r25622 = r25618 * r25621;
        double r25623 = cos(r25617);
        double r25624 = sin(r25620);
        double r25625 = r25623 * r25624;
        double r25626 = r25622 - r25625;
        double r25627 = pow(r25626, r25615);
        double r25628 = cos(r25616);
        double r25629 = cos(r25619);
        double r25630 = r25628 * r25629;
        double r25631 = lambda1;
        double r25632 = lambda2;
        double r25633 = r25631 - r25632;
        double r25634 = r25633 / r25615;
        double r25635 = sin(r25634);
        double r25636 = r25630 * r25635;
        double r25637 = r25636 * r25635;
        double r25638 = r25627 + r25637;
        double r25639 = sqrt(r25638);
        double r25640 = 1;
        double r25641 = r25631 / r25615;
        double r25642 = sin(r25641);
        double r25643 = r25632 / r25615;
        double r25644 = cos(r25643);
        double r25645 = r25642 * r25644;
        double r25646 = cos(r25641);
        double r25647 = sin(r25643);
        double r25648 = r25646 * r25647;
        double r25649 = r25645 - r25648;
        double r25650 = r25630 * r25649;
        double r25651 = r25650 * r25649;
        double r25652 = r25627 + r25651;
        double r25653 = r25640 - r25652;
        double r25654 = sqrt(r25653);
        double r25655 = atan2(r25639, r25654);
        double r25656 = r25615 * r25655;
        double r25657 = r25614 * r25656;
        return r25657;
}

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 r25658, r25659, r25660, r25661, r25662, r25663, r25664, r25665, r25666, r25667, r25668, r25669, r25670, r25671, r25672, r25673, r25674, r25675, r25676, r25677, r25678, r25679, r25680, r25681, r25682, r25683;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r25658);
        mpfr_init_set_str(r25659, "2", 10, MPFR_RNDN);
        mpfr_init(r25660);
        mpfr_init(r25661);
        mpfr_init(r25662);
        mpfr_init(r25663);
        mpfr_init(r25664);
        mpfr_init(r25665);
        mpfr_init(r25666);
        mpfr_init(r25667);
        mpfr_init(r25668);
        mpfr_init(r25669);
        mpfr_init(r25670);
        mpfr_init(r25671);
        mpfr_init(r25672);
        mpfr_init(r25673);
        mpfr_init(r25674);
        mpfr_init(r25675);
        mpfr_init(r25676);
        mpfr_init(r25677);
        mpfr_init_set_str(r25678, "1", 10, MPFR_RNDN);
        mpfr_init(r25679);
        mpfr_init(r25680);
        mpfr_init(r25681);
        mpfr_init(r25682);
        mpfr_init(r25683);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r25658, R, MPFR_RNDN);
        ;
        mpfr_set_d(r25660, phi1, MPFR_RNDN);
        mpfr_set_d(r25661, phi2, MPFR_RNDN);
        mpfr_sub(r25662, r25660, r25661, MPFR_RNDN);
        mpfr_div(r25663, r25662, r25659, MPFR_RNDN);
        mpfr_sin(r25664, r25663, MPFR_RNDN);
        mpfr_pow(r25665, r25664, r25659, MPFR_RNDN);
        mpfr_cos(r25666, r25660, MPFR_RNDN);
        mpfr_cos(r25667, r25661, MPFR_RNDN);
        mpfr_mul(r25668, r25666, r25667, MPFR_RNDN);
        mpfr_set_d(r25669, lambda1, MPFR_RNDN);
        mpfr_set_d(r25670, lambda2, MPFR_RNDN);
        mpfr_sub(r25671, r25669, r25670, MPFR_RNDN);
        mpfr_div(r25672, r25671, r25659, MPFR_RNDN);
        mpfr_sin(r25673, r25672, MPFR_RNDN);
        mpfr_mul(r25674, r25668, r25673, MPFR_RNDN);
        mpfr_mul(r25675, r25674, r25673, MPFR_RNDN);
        mpfr_add(r25676, r25665, r25675, MPFR_RNDN);
        mpfr_sqrt(r25677, r25676, MPFR_RNDN);
        ;
        mpfr_sub(r25679, r25678, r25676, MPFR_RNDN);
        mpfr_sqrt(r25680, r25679, MPFR_RNDN);
        mpfr_atan2(r25681, r25677, r25680, MPFR_RNDN);
        mpfr_mul(r25682, r25659, r25681, MPFR_RNDN);
        mpfr_mul(r25683, r25658, r25682, MPFR_RNDN);
        return mpfr_get_d(r25683, MPFR_RNDN);
}

static mpfr_t r25684, r25685, r25686, r25687, r25688, r25689, r25690, r25691, r25692, r25693, r25694, r25695, r25696, r25697, r25698, r25699, r25700, r25701, r25702, r25703, r25704, r25705, r25706, r25707, r25708, r25709, r25710, r25711, r25712, r25713, r25714, r25715, r25716, r25717, r25718, r25719, r25720, r25721, r25722, r25723, r25724, r25725, r25726, r25727;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r25684);
        mpfr_init_set_str(r25685, "2", 10, MPFR_RNDN);
        mpfr_init(r25686);
        mpfr_init(r25687);
        mpfr_init(r25688);
        mpfr_init(r25689);
        mpfr_init(r25690);
        mpfr_init(r25691);
        mpfr_init(r25692);
        mpfr_init(r25693);
        mpfr_init(r25694);
        mpfr_init(r25695);
        mpfr_init(r25696);
        mpfr_init(r25697);
        mpfr_init(r25698);
        mpfr_init(r25699);
        mpfr_init(r25700);
        mpfr_init(r25701);
        mpfr_init(r25702);
        mpfr_init(r25703);
        mpfr_init(r25704);
        mpfr_init(r25705);
        mpfr_init(r25706);
        mpfr_init(r25707);
        mpfr_init(r25708);
        mpfr_init(r25709);
        mpfr_init_set_str(r25710, "1", 10, MPFR_RNDN);
        mpfr_init(r25711);
        mpfr_init(r25712);
        mpfr_init(r25713);
        mpfr_init(r25714);
        mpfr_init(r25715);
        mpfr_init(r25716);
        mpfr_init(r25717);
        mpfr_init(r25718);
        mpfr_init(r25719);
        mpfr_init(r25720);
        mpfr_init(r25721);
        mpfr_init(r25722);
        mpfr_init(r25723);
        mpfr_init(r25724);
        mpfr_init(r25725);
        mpfr_init(r25726);
        mpfr_init(r25727);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r25684, R, MPFR_RNDN);
        ;
        mpfr_set_d(r25686, phi1, MPFR_RNDN);
        mpfr_div(r25687, r25686, r25685, MPFR_RNDN);
        mpfr_sin(r25688, r25687, MPFR_RNDN);
        mpfr_set_d(r25689, phi2, MPFR_RNDN);
        mpfr_div(r25690, r25689, r25685, MPFR_RNDN);
        mpfr_cos(r25691, r25690, MPFR_RNDN);
        mpfr_mul(r25692, r25688, r25691, MPFR_RNDN);
        mpfr_cos(r25693, r25687, MPFR_RNDN);
        mpfr_sin(r25694, r25690, MPFR_RNDN);
        mpfr_mul(r25695, r25693, r25694, MPFR_RNDN);
        mpfr_sub(r25696, r25692, r25695, MPFR_RNDN);
        mpfr_pow(r25697, r25696, r25685, MPFR_RNDN);
        mpfr_cos(r25698, r25686, MPFR_RNDN);
        mpfr_cos(r25699, r25689, MPFR_RNDN);
        mpfr_mul(r25700, r25698, r25699, MPFR_RNDN);
        mpfr_set_d(r25701, lambda1, MPFR_RNDN);
        mpfr_set_d(r25702, lambda2, MPFR_RNDN);
        mpfr_sub(r25703, r25701, r25702, MPFR_RNDN);
        mpfr_div(r25704, r25703, r25685, MPFR_RNDN);
        mpfr_sin(r25705, r25704, MPFR_RNDN);
        mpfr_mul(r25706, r25700, r25705, MPFR_RNDN);
        mpfr_mul(r25707, r25706, r25705, MPFR_RNDN);
        mpfr_add(r25708, r25697, r25707, MPFR_RNDN);
        mpfr_sqrt(r25709, r25708, MPFR_RNDN);
        ;
        mpfr_div(r25711, r25701, r25685, MPFR_RNDN);
        mpfr_sin(r25712, r25711, MPFR_RNDN);
        mpfr_div(r25713, r25702, r25685, MPFR_RNDN);
        mpfr_cos(r25714, r25713, MPFR_RNDN);
        mpfr_mul(r25715, r25712, r25714, MPFR_RNDN);
        mpfr_cos(r25716, r25711, MPFR_RNDN);
        mpfr_sin(r25717, r25713, MPFR_RNDN);
        mpfr_mul(r25718, r25716, r25717, MPFR_RNDN);
        mpfr_sub(r25719, r25715, r25718, MPFR_RNDN);
        mpfr_mul(r25720, r25700, r25719, MPFR_RNDN);
        mpfr_mul(r25721, r25720, r25719, MPFR_RNDN);
        mpfr_add(r25722, r25697, r25721, MPFR_RNDN);
        mpfr_sub(r25723, r25710, r25722, MPFR_RNDN);
        mpfr_sqrt(r25724, r25723, MPFR_RNDN);
        mpfr_atan2(r25725, r25709, r25724, MPFR_RNDN);
        mpfr_mul(r25726, r25685, r25725, MPFR_RNDN);
        mpfr_mul(r25727, r25684, r25726, MPFR_RNDN);
        return mpfr_get_d(r25727, MPFR_RNDN);
}

static mpfr_t r25728, r25729, r25730, r25731, r25732, r25733, r25734, r25735, r25736, r25737, r25738, r25739, r25740, r25741, r25742, r25743, r25744, r25745, r25746, r25747, r25748, r25749, r25750, r25751, r25752, r25753, r25754, r25755, r25756, r25757, r25758, r25759, r25760, r25761, r25762, r25763, r25764, r25765, r25766, r25767, r25768, r25769, r25770, r25771;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r25728);
        mpfr_init_set_str(r25729, "2", 10, MPFR_RNDN);
        mpfr_init(r25730);
        mpfr_init(r25731);
        mpfr_init(r25732);
        mpfr_init(r25733);
        mpfr_init(r25734);
        mpfr_init(r25735);
        mpfr_init(r25736);
        mpfr_init(r25737);
        mpfr_init(r25738);
        mpfr_init(r25739);
        mpfr_init(r25740);
        mpfr_init(r25741);
        mpfr_init(r25742);
        mpfr_init(r25743);
        mpfr_init(r25744);
        mpfr_init(r25745);
        mpfr_init(r25746);
        mpfr_init(r25747);
        mpfr_init(r25748);
        mpfr_init(r25749);
        mpfr_init(r25750);
        mpfr_init(r25751);
        mpfr_init(r25752);
        mpfr_init(r25753);
        mpfr_init_set_str(r25754, "1", 10, MPFR_RNDN);
        mpfr_init(r25755);
        mpfr_init(r25756);
        mpfr_init(r25757);
        mpfr_init(r25758);
        mpfr_init(r25759);
        mpfr_init(r25760);
        mpfr_init(r25761);
        mpfr_init(r25762);
        mpfr_init(r25763);
        mpfr_init(r25764);
        mpfr_init(r25765);
        mpfr_init(r25766);
        mpfr_init(r25767);
        mpfr_init(r25768);
        mpfr_init(r25769);
        mpfr_init(r25770);
        mpfr_init(r25771);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r25728, R, MPFR_RNDN);
        ;
        mpfr_set_d(r25730, phi1, MPFR_RNDN);
        mpfr_div(r25731, r25730, r25729, MPFR_RNDN);
        mpfr_sin(r25732, r25731, MPFR_RNDN);
        mpfr_set_d(r25733, phi2, MPFR_RNDN);
        mpfr_div(r25734, r25733, r25729, MPFR_RNDN);
        mpfr_cos(r25735, r25734, MPFR_RNDN);
        mpfr_mul(r25736, r25732, r25735, MPFR_RNDN);
        mpfr_cos(r25737, r25731, MPFR_RNDN);
        mpfr_sin(r25738, r25734, MPFR_RNDN);
        mpfr_mul(r25739, r25737, r25738, MPFR_RNDN);
        mpfr_sub(r25740, r25736, r25739, MPFR_RNDN);
        mpfr_pow(r25741, r25740, r25729, MPFR_RNDN);
        mpfr_cos(r25742, r25730, MPFR_RNDN);
        mpfr_cos(r25743, r25733, MPFR_RNDN);
        mpfr_mul(r25744, r25742, r25743, MPFR_RNDN);
        mpfr_set_d(r25745, lambda1, MPFR_RNDN);
        mpfr_set_d(r25746, lambda2, MPFR_RNDN);
        mpfr_sub(r25747, r25745, r25746, MPFR_RNDN);
        mpfr_div(r25748, r25747, r25729, MPFR_RNDN);
        mpfr_sin(r25749, r25748, MPFR_RNDN);
        mpfr_mul(r25750, r25744, r25749, MPFR_RNDN);
        mpfr_mul(r25751, r25750, r25749, MPFR_RNDN);
        mpfr_add(r25752, r25741, r25751, MPFR_RNDN);
        mpfr_sqrt(r25753, r25752, MPFR_RNDN);
        ;
        mpfr_div(r25755, r25745, r25729, MPFR_RNDN);
        mpfr_sin(r25756, r25755, MPFR_RNDN);
        mpfr_div(r25757, r25746, r25729, MPFR_RNDN);
        mpfr_cos(r25758, r25757, MPFR_RNDN);
        mpfr_mul(r25759, r25756, r25758, MPFR_RNDN);
        mpfr_cos(r25760, r25755, MPFR_RNDN);
        mpfr_sin(r25761, r25757, MPFR_RNDN);
        mpfr_mul(r25762, r25760, r25761, MPFR_RNDN);
        mpfr_sub(r25763, r25759, r25762, MPFR_RNDN);
        mpfr_mul(r25764, r25744, r25763, MPFR_RNDN);
        mpfr_mul(r25765, r25764, r25763, MPFR_RNDN);
        mpfr_add(r25766, r25741, r25765, MPFR_RNDN);
        mpfr_sub(r25767, r25754, r25766, MPFR_RNDN);
        mpfr_sqrt(r25768, r25767, MPFR_RNDN);
        mpfr_atan2(r25769, r25753, r25768, MPFR_RNDN);
        mpfr_mul(r25770, r25729, r25769, MPFR_RNDN);
        mpfr_mul(r25771, r25728, r25770, MPFR_RNDN);
        return mpfr_get_d(r25771, MPFR_RNDN);
}

