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

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

double f_if(float lambda1, float lambda2, float phi1, float phi2) {
        float r28538 = lambda1;
        float r28539 = phi2;
        float r28540 = cos(r28539);
        float r28541 = lambda2;
        float r28542 = r28538 - r28541;
        float r28543 = sin(r28542);
        float r28544 = r28540 * r28543;
        float r28545 = phi1;
        float r28546 = cos(r28545);
        float r28547 = cos(r28542);
        float r28548 = r28540 * r28547;
        float r28549 = r28546 + r28548;
        float r28550 = atan2(r28544, r28549);
        float r28551 = r28538 + r28550;
        return r28551;
}

double f_id(double lambda1, double lambda2, double phi1, double phi2) {
        double r28552 = lambda1;
        double r28553 = phi2;
        double r28554 = cos(r28553);
        double r28555 = lambda2;
        double r28556 = r28552 - r28555;
        double r28557 = sin(r28556);
        double r28558 = r28554 * r28557;
        double r28559 = phi1;
        double r28560 = cos(r28559);
        double r28561 = cos(r28556);
        double r28562 = r28554 * r28561;
        double r28563 = r28560 + r28562;
        double r28564 = atan2(r28558, r28563);
        double r28565 = r28552 + r28564;
        return r28565;
}


double f_of(float lambda1, float lambda2, float phi1, float phi2) {
        float r28566 = lambda1;
        float r28567 = phi2;
        float r28568 = cos(r28567);
        float r28569 = lambda2;
        float r28570 = r28566 - r28569;
        float r28571 = sin(r28570);
        float r28572 = r28568 * r28571;
        float r28573 = phi1;
        float r28574 = cos(r28573);
        float r28575 = cos(r28570);
        float r28576 = r28575 * r28568;
        float r28577 = r28574 + r28576;
        float r28578 = 3;
        float r28579 = pow(r28577, r28578);
        float r28580 = pow(r28579, r28578);
        float r28581 = cbrt(r28580);
        float r28582 = cbrt(r28581);
        float r28583 = atan2(r28572, r28582);
        float r28584 = r28566 + r28583;
        return r28584;
}

double f_od(double lambda1, double lambda2, double phi1, double phi2) {
        double r28585 = lambda1;
        double r28586 = phi2;
        double r28587 = cos(r28586);
        double r28588 = lambda2;
        double r28589 = r28585 - r28588;
        double r28590 = sin(r28589);
        double r28591 = r28587 * r28590;
        double r28592 = phi1;
        double r28593 = cos(r28592);
        double r28594 = cos(r28589);
        double r28595 = r28594 * r28587;
        double r28596 = r28593 + r28595;
        double r28597 = 3;
        double r28598 = pow(r28596, r28597);
        double r28599 = pow(r28598, r28597);
        double r28600 = cbrt(r28599);
        double r28601 = cbrt(r28600);
        double r28602 = atan2(r28591, r28601);
        double r28603 = r28585 + r28602;
        return r28603;
}

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 r28604, r28605, r28606, r28607, r28608, r28609, r28610, r28611, r28612, r28613, r28614, r28615, r28616, r28617;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28604);
        mpfr_init(r28605);
        mpfr_init(r28606);
        mpfr_init(r28607);
        mpfr_init(r28608);
        mpfr_init(r28609);
        mpfr_init(r28610);
        mpfr_init(r28611);
        mpfr_init(r28612);
        mpfr_init(r28613);
        mpfr_init(r28614);
        mpfr_init(r28615);
        mpfr_init(r28616);
        mpfr_init(r28617);
}

double f_im(double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r28604, lambda1, MPFR_RNDN);
        mpfr_set_d(r28605, phi2, MPFR_RNDN);
        mpfr_cos(r28606, r28605, MPFR_RNDN);
        mpfr_set_d(r28607, lambda2, MPFR_RNDN);
        mpfr_sub(r28608, r28604, r28607, MPFR_RNDN);
        mpfr_sin(r28609, r28608, MPFR_RNDN);
        mpfr_mul(r28610, r28606, r28609, MPFR_RNDN);
        mpfr_set_d(r28611, phi1, MPFR_RNDN);
        mpfr_cos(r28612, r28611, MPFR_RNDN);
        mpfr_cos(r28613, r28608, MPFR_RNDN);
        mpfr_mul(r28614, r28606, r28613, MPFR_RNDN);
        mpfr_add(r28615, r28612, r28614, MPFR_RNDN);
        mpfr_atan2(r28616, r28610, r28615, MPFR_RNDN);
        mpfr_add(r28617, r28604, r28616, MPFR_RNDN);
        return mpfr_get_d(r28617, MPFR_RNDN);
}

static mpfr_t r28618, r28619, r28620, r28621, r28622, r28623, r28624, r28625, r28626, r28627, r28628, r28629, r28630, r28631, r28632, r28633, r28634, r28635, r28636;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28618);
        mpfr_init(r28619);
        mpfr_init(r28620);
        mpfr_init(r28621);
        mpfr_init(r28622);
        mpfr_init(r28623);
        mpfr_init(r28624);
        mpfr_init(r28625);
        mpfr_init(r28626);
        mpfr_init(r28627);
        mpfr_init(r28628);
        mpfr_init(r28629);
        mpfr_init_set_str(r28630, "3", 10, MPFR_RNDN);
        mpfr_init(r28631);
        mpfr_init(r28632);
        mpfr_init(r28633);
        mpfr_init(r28634);
        mpfr_init(r28635);
        mpfr_init(r28636);
}

double f_fm(double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r28618, lambda1, MPFR_RNDN);
        mpfr_set_d(r28619, phi2, MPFR_RNDN);
        mpfr_cos(r28620, r28619, MPFR_RNDN);
        mpfr_set_d(r28621, lambda2, MPFR_RNDN);
        mpfr_sub(r28622, r28618, r28621, MPFR_RNDN);
        mpfr_sin(r28623, r28622, MPFR_RNDN);
        mpfr_mul(r28624, r28620, r28623, MPFR_RNDN);
        mpfr_set_d(r28625, phi1, MPFR_RNDN);
        mpfr_cos(r28626, r28625, MPFR_RNDN);
        mpfr_cos(r28627, r28622, MPFR_RNDN);
        mpfr_mul(r28628, r28627, r28620, MPFR_RNDN);
        mpfr_add(r28629, r28626, r28628, MPFR_RNDN);
        ;
        mpfr_pow(r28631, r28629, r28630, MPFR_RNDN);
        mpfr_pow(r28632, r28631, r28630, MPFR_RNDN);
        mpfr_cbrt(r28633, r28632, MPFR_RNDN);
        mpfr_cbrt(r28634, r28633, MPFR_RNDN);
        mpfr_atan2(r28635, r28624, r28634, MPFR_RNDN);
        mpfr_add(r28636, r28618, r28635, MPFR_RNDN);
        return mpfr_get_d(r28636, MPFR_RNDN);
}

static mpfr_t r28637, r28638, r28639, r28640, r28641, r28642, r28643, r28644, r28645, r28646, r28647, r28648, r28649, r28650, r28651, r28652, r28653, r28654, r28655;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28637);
        mpfr_init(r28638);
        mpfr_init(r28639);
        mpfr_init(r28640);
        mpfr_init(r28641);
        mpfr_init(r28642);
        mpfr_init(r28643);
        mpfr_init(r28644);
        mpfr_init(r28645);
        mpfr_init(r28646);
        mpfr_init(r28647);
        mpfr_init(r28648);
        mpfr_init_set_str(r28649, "3", 10, MPFR_RNDN);
        mpfr_init(r28650);
        mpfr_init(r28651);
        mpfr_init(r28652);
        mpfr_init(r28653);
        mpfr_init(r28654);
        mpfr_init(r28655);
}

double f_dm(double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r28637, lambda1, MPFR_RNDN);
        mpfr_set_d(r28638, phi2, MPFR_RNDN);
        mpfr_cos(r28639, r28638, MPFR_RNDN);
        mpfr_set_d(r28640, lambda2, MPFR_RNDN);
        mpfr_sub(r28641, r28637, r28640, MPFR_RNDN);
        mpfr_sin(r28642, r28641, MPFR_RNDN);
        mpfr_mul(r28643, r28639, r28642, MPFR_RNDN);
        mpfr_set_d(r28644, phi1, MPFR_RNDN);
        mpfr_cos(r28645, r28644, MPFR_RNDN);
        mpfr_cos(r28646, r28641, MPFR_RNDN);
        mpfr_mul(r28647, r28646, r28639, MPFR_RNDN);
        mpfr_add(r28648, r28645, r28647, MPFR_RNDN);
        ;
        mpfr_pow(r28650, r28648, r28649, MPFR_RNDN);
        mpfr_pow(r28651, r28650, r28649, MPFR_RNDN);
        mpfr_cbrt(r28652, r28651, MPFR_RNDN);
        mpfr_cbrt(r28653, r28652, MPFR_RNDN);
        mpfr_atan2(r28654, r28643, r28653, MPFR_RNDN);
        mpfr_add(r28655, r28637, r28654, MPFR_RNDN);
        return mpfr_get_d(r28655, MPFR_RNDN);
}

