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

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25570 = R;
        double r25571 = 2;
        double r25572 = phi1;
        double r25573 = phi2;
        double r25574 = r25572 - r25573;
        double r25575 = r25574 / r25571;
        double r25576 = sin(r25575);
        double r25577 = pow(r25576, r25571);
        double r25578 = cos(r25572);
        double r25579 = cos(r25573);
        double r25580 = r25578 * r25579;
        double r25581 = lambda1;
        double r25582 = lambda2;
        double r25583 = r25581 - r25582;
        double r25584 = r25583 / r25571;
        double r25585 = sin(r25584);
        double r25586 = r25580 * r25585;
        double r25587 = r25586 * r25585;
        double r25588 = r25577 + r25587;
        double r25589 = sqrt(r25588);
        double r25590 = 1;
        double r25591 = r25590 - r25588;
        double r25592 = sqrt(r25591);
        double r25593 = atan2(r25589, r25592);
        double r25594 = r25571 * r25593;
        double r25595 = r25570 * r25594;
        return r25595;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r25596 = R;
        float r25597 = 2;
        float r25598 = phi1;
        float r25599 = phi2;
        float r25600 = r25598 - r25599;
        float r25601 = r25600 / r25597;
        float r25602 = sin(r25601);
        float r25603 = pow(r25602, r25597);
        float r25604 = cos(r25598);
        float r25605 = cos(r25599);
        float r25606 = r25604 * r25605;
        float r25607 = lambda1;
        float r25608 = lambda2;
        float r25609 = r25607 - r25608;
        float r25610 = r25609 / r25597;
        float r25611 = sin(r25610);
        float r25612 = r25606 * r25611;
        float r25613 = r25612 * r25611;
        float r25614 = r25603 + r25613;
        float r25615 = sqrt(r25614);
        float r25616 = 1;
        float r25617 = exp(r25611);
        float r25618 = log(r25617);
        float r25619 = r25606 * r25618;
        float r25620 = r25619 * r25618;
        float r25621 = r25603 + r25620;
        float r25622 = r25616 - r25621;
        float r25623 = sqrt(r25622);
        float r25624 = atan2(r25615, r25623);
        float r25625 = r25597 * r25624;
        float r25626 = r25596 * r25625;
        return r25626;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25627 = R;
        double r25628 = 2;
        double r25629 = phi1;
        double r25630 = phi2;
        double r25631 = r25629 - r25630;
        double r25632 = r25631 / r25628;
        double r25633 = sin(r25632);
        double r25634 = pow(r25633, r25628);
        double r25635 = cos(r25629);
        double r25636 = cos(r25630);
        double r25637 = r25635 * r25636;
        double r25638 = lambda1;
        double r25639 = lambda2;
        double r25640 = r25638 - r25639;
        double r25641 = r25640 / r25628;
        double r25642 = sin(r25641);
        double r25643 = r25637 * r25642;
        double r25644 = r25643 * r25642;
        double r25645 = r25634 + r25644;
        double r25646 = sqrt(r25645);
        double r25647 = 1;
        double r25648 = exp(r25642);
        double r25649 = log(r25648);
        double r25650 = r25637 * r25649;
        double r25651 = r25650 * r25649;
        double r25652 = r25634 + r25651;
        double r25653 = r25647 - r25652;
        double r25654 = sqrt(r25653);
        double r25655 = atan2(r25646, r25654);
        double r25656 = r25628 * r25655;
        double r25657 = r25627 * 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;

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_set_str(r25704, "1", 10, MPFR_RNDN);
        mpfr_init(r25705);
        mpfr_init(r25706);
        mpfr_init(r25707);
        mpfr_init(r25708);
        mpfr_init(r25709);
        mpfr_init(r25710);
        mpfr_init(r25711);
        mpfr_init(r25712);
        mpfr_init(r25713);
        mpfr_init(r25714);
}

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_set_d(r25687, phi2, MPFR_RNDN);
        mpfr_sub(r25688, r25686, r25687, MPFR_RNDN);
        mpfr_div(r25689, r25688, r25685, MPFR_RNDN);
        mpfr_sin(r25690, r25689, MPFR_RNDN);
        mpfr_pow(r25691, r25690, r25685, MPFR_RNDN);
        mpfr_cos(r25692, r25686, MPFR_RNDN);
        mpfr_cos(r25693, r25687, MPFR_RNDN);
        mpfr_mul(r25694, r25692, r25693, MPFR_RNDN);
        mpfr_set_d(r25695, lambda1, MPFR_RNDN);
        mpfr_set_d(r25696, lambda2, MPFR_RNDN);
        mpfr_sub(r25697, r25695, r25696, MPFR_RNDN);
        mpfr_div(r25698, r25697, r25685, MPFR_RNDN);
        mpfr_sin(r25699, r25698, MPFR_RNDN);
        mpfr_mul(r25700, r25694, r25699, MPFR_RNDN);
        mpfr_mul(r25701, r25700, r25699, MPFR_RNDN);
        mpfr_add(r25702, r25691, r25701, MPFR_RNDN);
        mpfr_sqrt(r25703, r25702, MPFR_RNDN);
        ;
        mpfr_exp(r25705, r25699, MPFR_RNDN);
        mpfr_log(r25706, r25705, MPFR_RNDN);
        mpfr_mul(r25707, r25694, r25706, MPFR_RNDN);
        mpfr_mul(r25708, r25707, r25706, MPFR_RNDN);
        mpfr_add(r25709, r25691, r25708, MPFR_RNDN);
        mpfr_sub(r25710, r25704, r25709, MPFR_RNDN);
        mpfr_sqrt(r25711, r25710, MPFR_RNDN);
        mpfr_atan2(r25712, r25703, r25711, MPFR_RNDN);
        mpfr_mul(r25713, r25685, r25712, MPFR_RNDN);
        mpfr_mul(r25714, r25684, r25713, MPFR_RNDN);
        return mpfr_get_d(r25714, MPFR_RNDN);
}

static mpfr_t r25715, r25716, r25717, r25718, r25719, r25720, r25721, r25722, r25723, r25724, r25725, r25726, r25727, r25728, r25729, r25730, r25731, r25732, r25733, r25734, r25735, r25736, r25737, r25738, r25739, r25740, r25741, r25742, r25743, r25744, r25745;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r25715);
        mpfr_init_set_str(r25716, "2", 10, MPFR_RNDN);
        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);
        mpfr_init(r25728);
        mpfr_init(r25729);
        mpfr_init(r25730);
        mpfr_init(r25731);
        mpfr_init(r25732);
        mpfr_init(r25733);
        mpfr_init(r25734);
        mpfr_init_set_str(r25735, "1", 10, MPFR_RNDN);
        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);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r25715, R, MPFR_RNDN);
        ;
        mpfr_set_d(r25717, phi1, MPFR_RNDN);
        mpfr_set_d(r25718, phi2, MPFR_RNDN);
        mpfr_sub(r25719, r25717, r25718, MPFR_RNDN);
        mpfr_div(r25720, r25719, r25716, MPFR_RNDN);
        mpfr_sin(r25721, r25720, MPFR_RNDN);
        mpfr_pow(r25722, r25721, r25716, MPFR_RNDN);
        mpfr_cos(r25723, r25717, MPFR_RNDN);
        mpfr_cos(r25724, r25718, MPFR_RNDN);
        mpfr_mul(r25725, r25723, r25724, MPFR_RNDN);
        mpfr_set_d(r25726, lambda1, MPFR_RNDN);
        mpfr_set_d(r25727, lambda2, MPFR_RNDN);
        mpfr_sub(r25728, r25726, r25727, MPFR_RNDN);
        mpfr_div(r25729, r25728, r25716, MPFR_RNDN);
        mpfr_sin(r25730, r25729, MPFR_RNDN);
        mpfr_mul(r25731, r25725, r25730, MPFR_RNDN);
        mpfr_mul(r25732, r25731, r25730, MPFR_RNDN);
        mpfr_add(r25733, r25722, r25732, MPFR_RNDN);
        mpfr_sqrt(r25734, r25733, MPFR_RNDN);
        ;
        mpfr_exp(r25736, r25730, MPFR_RNDN);
        mpfr_log(r25737, r25736, MPFR_RNDN);
        mpfr_mul(r25738, r25725, r25737, MPFR_RNDN);
        mpfr_mul(r25739, r25738, r25737, MPFR_RNDN);
        mpfr_add(r25740, r25722, r25739, MPFR_RNDN);
        mpfr_sub(r25741, r25735, r25740, MPFR_RNDN);
        mpfr_sqrt(r25742, r25741, MPFR_RNDN);
        mpfr_atan2(r25743, r25734, r25742, MPFR_RNDN);
        mpfr_mul(r25744, r25716, r25743, MPFR_RNDN);
        mpfr_mul(r25745, r25715, r25744, MPFR_RNDN);
        return mpfr_get_d(r25745, MPFR_RNDN);
}

