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

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

double f_if(float lambda1, float lambda2, float phi1, float phi2) {
        float r26562 = lambda1;
        float r26563 = lambda2;
        float r26564 = r26562 - r26563;
        float r26565 = sin(r26564);
        float r26566 = phi2;
        float r26567 = cos(r26566);
        float r26568 = r26565 * r26567;
        float r26569 = phi1;
        float r26570 = cos(r26569);
        float r26571 = sin(r26566);
        float r26572 = r26570 * r26571;
        float r26573 = sin(r26569);
        float r26574 = r26573 * r26567;
        float r26575 = cos(r26564);
        float r26576 = r26574 * r26575;
        float r26577 = r26572 - r26576;
        float r26578 = atan2(r26568, r26577);
        return r26578;
}

double f_id(double lambda1, double lambda2, double phi1, double phi2) {
        double r26579 = lambda1;
        double r26580 = lambda2;
        double r26581 = r26579 - r26580;
        double r26582 = sin(r26581);
        double r26583 = phi2;
        double r26584 = cos(r26583);
        double r26585 = r26582 * r26584;
        double r26586 = phi1;
        double r26587 = cos(r26586);
        double r26588 = sin(r26583);
        double r26589 = r26587 * r26588;
        double r26590 = sin(r26586);
        double r26591 = r26590 * r26584;
        double r26592 = cos(r26581);
        double r26593 = r26591 * r26592;
        double r26594 = r26589 - r26593;
        double r26595 = atan2(r26585, r26594);
        return r26595;
}


double f_of(float lambda1, float lambda2, float phi1, float phi2) {
        float r26596 = lambda1;
        float r26597 = sin(r26596);
        float r26598 = lambda2;
        float r26599 = cos(r26598);
        float r26600 = r26597 * r26599;
        float r26601 = cos(r26596);
        float r26602 = -r26598;
        float r26603 = sin(r26602);
        float r26604 = r26601 * r26603;
        float r26605 = r26600 + r26604;
        float r26606 = phi2;
        float r26607 = cos(r26606);
        float r26608 = r26605 * r26607;
        float r26609 = phi1;
        float r26610 = cos(r26609);
        float r26611 = sin(r26606);
        float r26612 = r26610 * r26611;
        float r26613 = sin(r26609);
        float r26614 = r26613 * r26607;
        float r26615 = r26601 * r26599;
        float r26616 = r26597 * r26603;
        float r26617 = r26615 - r26616;
        float r26618 = r26614 * r26617;
        float r26619 = r26612 - r26618;
        float r26620 = atan2(r26608, r26619);
        return r26620;
}

double f_od(double lambda1, double lambda2, double phi1, double phi2) {
        double r26621 = lambda1;
        double r26622 = sin(r26621);
        double r26623 = lambda2;
        double r26624 = cos(r26623);
        double r26625 = r26622 * r26624;
        double r26626 = cos(r26621);
        double r26627 = -r26623;
        double r26628 = sin(r26627);
        double r26629 = r26626 * r26628;
        double r26630 = r26625 + r26629;
        double r26631 = phi2;
        double r26632 = cos(r26631);
        double r26633 = r26630 * r26632;
        double r26634 = phi1;
        double r26635 = cos(r26634);
        double r26636 = sin(r26631);
        double r26637 = r26635 * r26636;
        double r26638 = sin(r26634);
        double r26639 = r26638 * r26632;
        double r26640 = r26626 * r26624;
        double r26641 = r26622 * r26628;
        double r26642 = r26640 - r26641;
        double r26643 = r26639 * r26642;
        double r26644 = r26637 - r26643;
        double r26645 = atan2(r26633, r26644);
        return r26645;
}

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 r26646, r26647, r26648, r26649, r26650, r26651, r26652, r26653, r26654, r26655, r26656, r26657, r26658, r26659, r26660, r26661, r26662;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26646);
        mpfr_init(r26647);
        mpfr_init(r26648);
        mpfr_init(r26649);
        mpfr_init(r26650);
        mpfr_init(r26651);
        mpfr_init(r26652);
        mpfr_init(r26653);
        mpfr_init(r26654);
        mpfr_init(r26655);
        mpfr_init(r26656);
        mpfr_init(r26657);
        mpfr_init(r26658);
        mpfr_init(r26659);
        mpfr_init(r26660);
        mpfr_init(r26661);
        mpfr_init(r26662);
}

double f_im(double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r26646, lambda1, MPFR_RNDN);
        mpfr_set_d(r26647, lambda2, MPFR_RNDN);
        mpfr_sub(r26648, r26646, r26647, MPFR_RNDN);
        mpfr_sin(r26649, r26648, MPFR_RNDN);
        mpfr_set_d(r26650, phi2, MPFR_RNDN);
        mpfr_cos(r26651, r26650, MPFR_RNDN);
        mpfr_mul(r26652, r26649, r26651, MPFR_RNDN);
        mpfr_set_d(r26653, phi1, MPFR_RNDN);
        mpfr_cos(r26654, r26653, MPFR_RNDN);
        mpfr_sin(r26655, r26650, MPFR_RNDN);
        mpfr_mul(r26656, r26654, r26655, MPFR_RNDN);
        mpfr_sin(r26657, r26653, MPFR_RNDN);
        mpfr_mul(r26658, r26657, r26651, MPFR_RNDN);
        mpfr_cos(r26659, r26648, MPFR_RNDN);
        mpfr_mul(r26660, r26658, r26659, MPFR_RNDN);
        mpfr_sub(r26661, r26656, r26660, MPFR_RNDN);
        mpfr_atan2(r26662, r26652, r26661, MPFR_RNDN);
        return mpfr_get_d(r26662, MPFR_RNDN);
}

static mpfr_t r26663, r26664, r26665, r26666, r26667, r26668, r26669, r26670, r26671, r26672, r26673, r26674, r26675, r26676, r26677, r26678, r26679, r26680, r26681, r26682, r26683, r26684, r26685, r26686, r26687;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26663);
        mpfr_init(r26664);
        mpfr_init(r26665);
        mpfr_init(r26666);
        mpfr_init(r26667);
        mpfr_init(r26668);
        mpfr_init(r26669);
        mpfr_init(r26670);
        mpfr_init(r26671);
        mpfr_init(r26672);
        mpfr_init(r26673);
        mpfr_init(r26674);
        mpfr_init(r26675);
        mpfr_init(r26676);
        mpfr_init(r26677);
        mpfr_init(r26678);
        mpfr_init(r26679);
        mpfr_init(r26680);
        mpfr_init(r26681);
        mpfr_init(r26682);
        mpfr_init(r26683);
        mpfr_init(r26684);
        mpfr_init(r26685);
        mpfr_init(r26686);
        mpfr_init(r26687);
}

double f_fm(double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r26663, lambda1, MPFR_RNDN);
        mpfr_sin(r26664, r26663, MPFR_RNDN);
        mpfr_set_d(r26665, lambda2, MPFR_RNDN);
        mpfr_cos(r26666, r26665, MPFR_RNDN);
        mpfr_mul(r26667, r26664, r26666, MPFR_RNDN);
        mpfr_cos(r26668, r26663, MPFR_RNDN);
        mpfr_neg(r26669, r26665, MPFR_RNDN);
        mpfr_sin(r26670, r26669, MPFR_RNDN);
        mpfr_mul(r26671, r26668, r26670, MPFR_RNDN);
        mpfr_add(r26672, r26667, r26671, MPFR_RNDN);
        mpfr_set_d(r26673, phi2, MPFR_RNDN);
        mpfr_cos(r26674, r26673, MPFR_RNDN);
        mpfr_mul(r26675, r26672, r26674, MPFR_RNDN);
        mpfr_set_d(r26676, phi1, MPFR_RNDN);
        mpfr_cos(r26677, r26676, MPFR_RNDN);
        mpfr_sin(r26678, r26673, MPFR_RNDN);
        mpfr_mul(r26679, r26677, r26678, MPFR_RNDN);
        mpfr_sin(r26680, r26676, MPFR_RNDN);
        mpfr_mul(r26681, r26680, r26674, MPFR_RNDN);
        mpfr_mul(r26682, r26668, r26666, MPFR_RNDN);
        mpfr_mul(r26683, r26664, r26670, MPFR_RNDN);
        mpfr_sub(r26684, r26682, r26683, MPFR_RNDN);
        mpfr_mul(r26685, r26681, r26684, MPFR_RNDN);
        mpfr_sub(r26686, r26679, r26685, MPFR_RNDN);
        mpfr_atan2(r26687, r26675, r26686, MPFR_RNDN);
        return mpfr_get_d(r26687, MPFR_RNDN);
}

static mpfr_t r26688, r26689, r26690, r26691, r26692, r26693, r26694, r26695, r26696, r26697, r26698, r26699, r26700, r26701, r26702, r26703, r26704, r26705, r26706, r26707, r26708, r26709, r26710, r26711, r26712;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26688);
        mpfr_init(r26689);
        mpfr_init(r26690);
        mpfr_init(r26691);
        mpfr_init(r26692);
        mpfr_init(r26693);
        mpfr_init(r26694);
        mpfr_init(r26695);
        mpfr_init(r26696);
        mpfr_init(r26697);
        mpfr_init(r26698);
        mpfr_init(r26699);
        mpfr_init(r26700);
        mpfr_init(r26701);
        mpfr_init(r26702);
        mpfr_init(r26703);
        mpfr_init(r26704);
        mpfr_init(r26705);
        mpfr_init(r26706);
        mpfr_init(r26707);
        mpfr_init(r26708);
        mpfr_init(r26709);
        mpfr_init(r26710);
        mpfr_init(r26711);
        mpfr_init(r26712);
}

double f_dm(double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r26688, lambda1, MPFR_RNDN);
        mpfr_sin(r26689, r26688, MPFR_RNDN);
        mpfr_set_d(r26690, lambda2, MPFR_RNDN);
        mpfr_cos(r26691, r26690, MPFR_RNDN);
        mpfr_mul(r26692, r26689, r26691, MPFR_RNDN);
        mpfr_cos(r26693, r26688, MPFR_RNDN);
        mpfr_neg(r26694, r26690, MPFR_RNDN);
        mpfr_sin(r26695, r26694, MPFR_RNDN);
        mpfr_mul(r26696, r26693, r26695, MPFR_RNDN);
        mpfr_add(r26697, r26692, r26696, MPFR_RNDN);
        mpfr_set_d(r26698, phi2, MPFR_RNDN);
        mpfr_cos(r26699, r26698, MPFR_RNDN);
        mpfr_mul(r26700, r26697, r26699, MPFR_RNDN);
        mpfr_set_d(r26701, phi1, MPFR_RNDN);
        mpfr_cos(r26702, r26701, MPFR_RNDN);
        mpfr_sin(r26703, r26698, MPFR_RNDN);
        mpfr_mul(r26704, r26702, r26703, MPFR_RNDN);
        mpfr_sin(r26705, r26701, MPFR_RNDN);
        mpfr_mul(r26706, r26705, r26699, MPFR_RNDN);
        mpfr_mul(r26707, r26693, r26691, MPFR_RNDN);
        mpfr_mul(r26708, r26689, r26695, MPFR_RNDN);
        mpfr_sub(r26709, r26707, r26708, MPFR_RNDN);
        mpfr_mul(r26710, r26706, r26709, MPFR_RNDN);
        mpfr_sub(r26711, r26704, r26710, MPFR_RNDN);
        mpfr_atan2(r26712, r26700, r26711, MPFR_RNDN);
        return mpfr_get_d(r26712, MPFR_RNDN);
}

