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

char *name = "Destination given bearing on a great circle";

double f_if(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r9458 = lambda1;
        float r9459 = theta;
        float r9460 = sin(r9459);
        float r9461 = delta;
        float r9462 = sin(r9461);
        float r9463 = r9460 * r9462;
        float r9464 = phi1;
        float r9465 = cos(r9464);
        float r9466 = r9463 * r9465;
        float r9467 = cos(r9461);
        float r9468 = sin(r9464);
        float r9469 = r9468 * r9467;
        float r9470 = r9465 * r9462;
        float r9471 = cos(r9459);
        float r9472 = r9470 * r9471;
        float r9473 = r9469 + r9472;
        float r9474 = asin(r9473);
        float r9475 = sin(r9474);
        float r9476 = r9468 * r9475;
        float r9477 = r9467 - r9476;
        float r9478 = atan2(r9466, r9477);
        float r9479 = r9458 + r9478;
        return r9479;
}

double f_id(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r9480 = lambda1;
        double r9481 = theta;
        double r9482 = sin(r9481);
        double r9483 = delta;
        double r9484 = sin(r9483);
        double r9485 = r9482 * r9484;
        double r9486 = phi1;
        double r9487 = cos(r9486);
        double r9488 = r9485 * r9487;
        double r9489 = cos(r9483);
        double r9490 = sin(r9486);
        double r9491 = r9490 * r9489;
        double r9492 = r9487 * r9484;
        double r9493 = cos(r9481);
        double r9494 = r9492 * r9493;
        double r9495 = r9491 + r9494;
        double r9496 = asin(r9495);
        double r9497 = sin(r9496);
        double r9498 = r9490 * r9497;
        double r9499 = r9489 - r9498;
        double r9500 = atan2(r9488, r9499);
        double r9501 = r9480 + r9500;
        return r9501;
}


double f_of(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r9502 = phi1;
        float r9503 = cos(r9502);
        float r9504 = delta;
        float r9505 = sin(r9504);
        float r9506 = theta;
        float r9507 = sin(r9506);
        float r9508 = r9505 * r9507;
        float r9509 = r9503 * r9508;
        float r9510 = cos(r9504);
        float r9511 = sin(r9502);
        float r9512 = cos(r9506);
        float r9513 = r9512 * r9503;
        float r9514 = r9511 * r9513;
        float r9515 = r9514 * r9505;
        float r9516 = 2.0f;
        float r9517 = pow(r9511, r9516);
        float r9518 = r9510 * r9517;
        float r9519 = r9515 + r9518;
        float r9520 = r9510 - r9519;
        float r9521 = atan2(r9509, r9520);
        float r9522 = lambda1;
        float r9523 = r9521 + r9522;
        return r9523;
}

double f_od(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r9524 = phi1;
        double r9525 = cos(r9524);
        double r9526 = delta;
        double r9527 = sin(r9526);
        double r9528 = theta;
        double r9529 = sin(r9528);
        double r9530 = r9527 * r9529;
        double r9531 = r9525 * r9530;
        double r9532 = cos(r9526);
        double r9533 = sin(r9524);
        double r9534 = cos(r9528);
        double r9535 = r9534 * r9525;
        double r9536 = r9533 * r9535;
        double r9537 = r9536 * r9527;
        double r9538 = 2.0;
        double r9539 = pow(r9533, r9538);
        double r9540 = r9532 * r9539;
        double r9541 = r9537 + r9540;
        double r9542 = r9532 - r9541;
        double r9543 = atan2(r9531, r9542);
        double r9544 = lambda1;
        double r9545 = r9543 + r9544;
        return r9545;
}

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 r9546, r9547, r9548, r9549, r9550, r9551, r9552, r9553, r9554, r9555, r9556, r9557, r9558, r9559, r9560, r9561, r9562, r9563, r9564, r9565, r9566, r9567;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9546);
        mpfr_init(r9547);
        mpfr_init(r9548);
        mpfr_init(r9549);
        mpfr_init(r9550);
        mpfr_init(r9551);
        mpfr_init(r9552);
        mpfr_init(r9553);
        mpfr_init(r9554);
        mpfr_init(r9555);
        mpfr_init(r9556);
        mpfr_init(r9557);
        mpfr_init(r9558);
        mpfr_init(r9559);
        mpfr_init(r9560);
        mpfr_init(r9561);
        mpfr_init(r9562);
        mpfr_init(r9563);
        mpfr_init(r9564);
        mpfr_init(r9565);
        mpfr_init(r9566);
        mpfr_init(r9567);
}

double f_im(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9546, lambda1, MPFR_RNDN);
        mpfr_set_d(r9547, theta, MPFR_RNDN);
        mpfr_sin(r9548, r9547, MPFR_RNDN);
        mpfr_set_d(r9549, delta, MPFR_RNDN);
        mpfr_sin(r9550, r9549, MPFR_RNDN);
        mpfr_mul(r9551, r9548, r9550, MPFR_RNDN);
        mpfr_set_d(r9552, phi1, MPFR_RNDN);
        mpfr_cos(r9553, r9552, MPFR_RNDN);
        mpfr_mul(r9554, r9551, r9553, MPFR_RNDN);
        mpfr_cos(r9555, r9549, MPFR_RNDN);
        mpfr_sin(r9556, r9552, MPFR_RNDN);
        mpfr_mul(r9557, r9556, r9555, MPFR_RNDN);
        mpfr_mul(r9558, r9553, r9550, MPFR_RNDN);
        mpfr_cos(r9559, r9547, MPFR_RNDN);
        mpfr_mul(r9560, r9558, r9559, MPFR_RNDN);
        mpfr_add(r9561, r9557, r9560, MPFR_RNDN);
        mpfr_asin(r9562, r9561, MPFR_RNDN);
        mpfr_sin(r9563, r9562, MPFR_RNDN);
        mpfr_mul(r9564, r9556, r9563, MPFR_RNDN);
        mpfr_sub(r9565, r9555, r9564, MPFR_RNDN);
        mpfr_atan2(r9566, r9554, r9565, MPFR_RNDN);
        mpfr_add(r9567, r9546, r9566, MPFR_RNDN);
        return mpfr_get_d(r9567, MPFR_RNDN);
}

static mpfr_t r9568, r9569, r9570, r9571, r9572, r9573, r9574, r9575, r9576, r9577, r9578, r9579, r9580, r9581, r9582, r9583, r9584, r9585, r9586, r9587, r9588, r9589;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9568);
        mpfr_init(r9569);
        mpfr_init(r9570);
        mpfr_init(r9571);
        mpfr_init(r9572);
        mpfr_init(r9573);
        mpfr_init(r9574);
        mpfr_init(r9575);
        mpfr_init(r9576);
        mpfr_init(r9577);
        mpfr_init(r9578);
        mpfr_init(r9579);
        mpfr_init(r9580);
        mpfr_init(r9581);
        mpfr_init_set_str(r9582, "2", 10, MPFR_RNDN);
        mpfr_init(r9583);
        mpfr_init(r9584);
        mpfr_init(r9585);
        mpfr_init(r9586);
        mpfr_init(r9587);
        mpfr_init(r9588);
        mpfr_init(r9589);
}

double f_fm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9568, phi1, MPFR_RNDN);
        mpfr_cos(r9569, r9568, MPFR_RNDN);
        mpfr_set_d(r9570, delta, MPFR_RNDN);
        mpfr_sin(r9571, r9570, MPFR_RNDN);
        mpfr_set_d(r9572, theta, MPFR_RNDN);
        mpfr_sin(r9573, r9572, MPFR_RNDN);
        mpfr_mul(r9574, r9571, r9573, MPFR_RNDN);
        mpfr_mul(r9575, r9569, r9574, MPFR_RNDN);
        mpfr_cos(r9576, r9570, MPFR_RNDN);
        mpfr_sin(r9577, r9568, MPFR_RNDN);
        mpfr_cos(r9578, r9572, MPFR_RNDN);
        mpfr_mul(r9579, r9578, r9569, MPFR_RNDN);
        mpfr_mul(r9580, r9577, r9579, MPFR_RNDN);
        mpfr_mul(r9581, r9580, r9571, MPFR_RNDN);
        ;
        mpfr_pow(r9583, r9577, r9582, MPFR_RNDN);
        mpfr_mul(r9584, r9576, r9583, MPFR_RNDN);
        mpfr_add(r9585, r9581, r9584, MPFR_RNDN);
        mpfr_sub(r9586, r9576, r9585, MPFR_RNDN);
        mpfr_atan2(r9587, r9575, r9586, MPFR_RNDN);
        mpfr_set_d(r9588, lambda1, MPFR_RNDN);
        mpfr_add(r9589, r9587, r9588, MPFR_RNDN);
        return mpfr_get_d(r9589, MPFR_RNDN);
}

static mpfr_t r9590, r9591, r9592, r9593, r9594, r9595, r9596, r9597, r9598, r9599, r9600, r9601, r9602, r9603, r9604, r9605, r9606, r9607, r9608, r9609, r9610, r9611;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9590);
        mpfr_init(r9591);
        mpfr_init(r9592);
        mpfr_init(r9593);
        mpfr_init(r9594);
        mpfr_init(r9595);
        mpfr_init(r9596);
        mpfr_init(r9597);
        mpfr_init(r9598);
        mpfr_init(r9599);
        mpfr_init(r9600);
        mpfr_init(r9601);
        mpfr_init(r9602);
        mpfr_init(r9603);
        mpfr_init_set_str(r9604, "2", 10, MPFR_RNDN);
        mpfr_init(r9605);
        mpfr_init(r9606);
        mpfr_init(r9607);
        mpfr_init(r9608);
        mpfr_init(r9609);
        mpfr_init(r9610);
        mpfr_init(r9611);
}

double f_dm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9590, phi1, MPFR_RNDN);
        mpfr_cos(r9591, r9590, MPFR_RNDN);
        mpfr_set_d(r9592, delta, MPFR_RNDN);
        mpfr_sin(r9593, r9592, MPFR_RNDN);
        mpfr_set_d(r9594, theta, MPFR_RNDN);
        mpfr_sin(r9595, r9594, MPFR_RNDN);
        mpfr_mul(r9596, r9593, r9595, MPFR_RNDN);
        mpfr_mul(r9597, r9591, r9596, MPFR_RNDN);
        mpfr_cos(r9598, r9592, MPFR_RNDN);
        mpfr_sin(r9599, r9590, MPFR_RNDN);
        mpfr_cos(r9600, r9594, MPFR_RNDN);
        mpfr_mul(r9601, r9600, r9591, MPFR_RNDN);
        mpfr_mul(r9602, r9599, r9601, MPFR_RNDN);
        mpfr_mul(r9603, r9602, r9593, MPFR_RNDN);
        ;
        mpfr_pow(r9605, r9599, r9604, MPFR_RNDN);
        mpfr_mul(r9606, r9598, r9605, MPFR_RNDN);
        mpfr_add(r9607, r9603, r9606, MPFR_RNDN);
        mpfr_sub(r9608, r9598, r9607, MPFR_RNDN);
        mpfr_atan2(r9609, r9597, r9608, MPFR_RNDN);
        mpfr_set_d(r9610, lambda1, MPFR_RNDN);
        mpfr_add(r9611, r9609, r9610, MPFR_RNDN);
        return mpfr_get_d(r9611, MPFR_RNDN);
}

