#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 r9392 = lambda1;
        float r9393 = theta;
        float r9394 = sin(r9393);
        float r9395 = delta;
        float r9396 = sin(r9395);
        float r9397 = r9394 * r9396;
        float r9398 = phi1;
        float r9399 = cos(r9398);
        float r9400 = r9397 * r9399;
        float r9401 = cos(r9395);
        float r9402 = sin(r9398);
        float r9403 = r9402 * r9401;
        float r9404 = r9399 * r9396;
        float r9405 = cos(r9393);
        float r9406 = r9404 * r9405;
        float r9407 = r9403 + r9406;
        float r9408 = asin(r9407);
        float r9409 = sin(r9408);
        float r9410 = r9402 * r9409;
        float r9411 = r9401 - r9410;
        float r9412 = atan2(r9400, r9411);
        float r9413 = r9392 + r9412;
        return r9413;
}

double f_id(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r9414 = lambda1;
        double r9415 = theta;
        double r9416 = sin(r9415);
        double r9417 = delta;
        double r9418 = sin(r9417);
        double r9419 = r9416 * r9418;
        double r9420 = phi1;
        double r9421 = cos(r9420);
        double r9422 = r9419 * r9421;
        double r9423 = cos(r9417);
        double r9424 = sin(r9420);
        double r9425 = r9424 * r9423;
        double r9426 = r9421 * r9418;
        double r9427 = cos(r9415);
        double r9428 = r9426 * r9427;
        double r9429 = r9425 + r9428;
        double r9430 = asin(r9429);
        double r9431 = sin(r9430);
        double r9432 = r9424 * r9431;
        double r9433 = r9423 - r9432;
        double r9434 = atan2(r9422, r9433);
        double r9435 = r9414 + r9434;
        return r9435;
}


double f_of(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r9436 = lambda1;
        float r9437 = phi1;
        float r9438 = cos(r9437);
        float r9439 = delta;
        float r9440 = sin(r9439);
        float r9441 = theta;
        float r9442 = sin(r9441);
        float r9443 = r9440 * r9442;
        float r9444 = r9438 * r9443;
        float r9445 = cos(r9439);
        float r9446 = 3.0f;
        float r9447 = pow(r9445, r9446);
        float r9448 = sin(r9437);
        float r9449 = r9445 * r9448;
        float r9450 = cos(r9441);
        float r9451 = r9438 * r9440;
        float r9452 = r9450 * r9451;
        float r9453 = r9449 + r9452;
        float r9454 = asin(r9453);
        float r9455 = sin(r9454);
        float r9456 = r9448 * r9455;
        float r9457 = pow(r9456, r9446);
        float r9458 = r9447 - r9457;
        float r9459 = r9445 * r9445;
        float r9460 = r9454 * r9454;
        float r9461 = r9460 * r9454;
        float r9462 = cbrt(r9461);
        float r9463 = sin(r9462);
        float r9464 = r9448 * r9463;
        float r9465 = r9464 * r9445;
        float r9466 = r9456 * r9456;
        float r9467 = r9465 + r9466;
        float r9468 = r9459 + r9467;
        float r9469 = r9458 / r9468;
        float r9470 = atan2(r9444, r9469);
        float r9471 = r9436 + r9470;
        return r9471;
}

double f_od(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r9472 = lambda1;
        double r9473 = phi1;
        double r9474 = cos(r9473);
        double r9475 = delta;
        double r9476 = sin(r9475);
        double r9477 = theta;
        double r9478 = sin(r9477);
        double r9479 = r9476 * r9478;
        double r9480 = r9474 * r9479;
        double r9481 = cos(r9475);
        double r9482 = 3.0;
        double r9483 = pow(r9481, r9482);
        double r9484 = sin(r9473);
        double r9485 = r9481 * r9484;
        double r9486 = cos(r9477);
        double r9487 = r9474 * r9476;
        double r9488 = r9486 * r9487;
        double r9489 = r9485 + r9488;
        double r9490 = asin(r9489);
        double r9491 = sin(r9490);
        double r9492 = r9484 * r9491;
        double r9493 = pow(r9492, r9482);
        double r9494 = r9483 - r9493;
        double r9495 = r9481 * r9481;
        double r9496 = r9490 * r9490;
        double r9497 = r9496 * r9490;
        double r9498 = cbrt(r9497);
        double r9499 = sin(r9498);
        double r9500 = r9484 * r9499;
        double r9501 = r9500 * r9481;
        double r9502 = r9492 * r9492;
        double r9503 = r9501 + r9502;
        double r9504 = r9495 + r9503;
        double r9505 = r9494 / r9504;
        double r9506 = atan2(r9480, r9505);
        double r9507 = r9472 + r9506;
        return r9507;
}

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 r9508, r9509, r9510, r9511, r9512, r9513, r9514, r9515, r9516, r9517, r9518, r9519, r9520, r9521, r9522, r9523, r9524, r9525, r9526, r9527, r9528, r9529;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9508);
        mpfr_init(r9509);
        mpfr_init(r9510);
        mpfr_init(r9511);
        mpfr_init(r9512);
        mpfr_init(r9513);
        mpfr_init(r9514);
        mpfr_init(r9515);
        mpfr_init(r9516);
        mpfr_init(r9517);
        mpfr_init(r9518);
        mpfr_init(r9519);
        mpfr_init(r9520);
        mpfr_init(r9521);
        mpfr_init(r9522);
        mpfr_init(r9523);
        mpfr_init(r9524);
        mpfr_init(r9525);
        mpfr_init(r9526);
        mpfr_init(r9527);
        mpfr_init(r9528);
        mpfr_init(r9529);
}

double f_im(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9508, lambda1, MPFR_RNDN);
        mpfr_set_d(r9509, theta, MPFR_RNDN);
        mpfr_sin(r9510, r9509, MPFR_RNDN);
        mpfr_set_d(r9511, delta, MPFR_RNDN);
        mpfr_sin(r9512, r9511, MPFR_RNDN);
        mpfr_mul(r9513, r9510, r9512, MPFR_RNDN);
        mpfr_set_d(r9514, phi1, MPFR_RNDN);
        mpfr_cos(r9515, r9514, MPFR_RNDN);
        mpfr_mul(r9516, r9513, r9515, MPFR_RNDN);
        mpfr_cos(r9517, r9511, MPFR_RNDN);
        mpfr_sin(r9518, r9514, MPFR_RNDN);
        mpfr_mul(r9519, r9518, r9517, MPFR_RNDN);
        mpfr_mul(r9520, r9515, r9512, MPFR_RNDN);
        mpfr_cos(r9521, r9509, MPFR_RNDN);
        mpfr_mul(r9522, r9520, r9521, MPFR_RNDN);
        mpfr_add(r9523, r9519, r9522, MPFR_RNDN);
        mpfr_asin(r9524, r9523, MPFR_RNDN);
        mpfr_sin(r9525, r9524, MPFR_RNDN);
        mpfr_mul(r9526, r9518, r9525, MPFR_RNDN);
        mpfr_sub(r9527, r9517, r9526, MPFR_RNDN);
        mpfr_atan2(r9528, r9516, r9527, MPFR_RNDN);
        mpfr_add(r9529, r9508, r9528, MPFR_RNDN);
        return mpfr_get_d(r9529, MPFR_RNDN);
}

static mpfr_t r9530, r9531, r9532, r9533, r9534, r9535, r9536, r9537, r9538, r9539, r9540, r9541, r9542, r9543, r9544, r9545, r9546, r9547, r9548, r9549, r9550, r9551, r9552, r9553, r9554, r9555, r9556, r9557, r9558, r9559, r9560, r9561, r9562, r9563, r9564, r9565;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9530);
        mpfr_init(r9531);
        mpfr_init(r9532);
        mpfr_init(r9533);
        mpfr_init(r9534);
        mpfr_init(r9535);
        mpfr_init(r9536);
        mpfr_init(r9537);
        mpfr_init(r9538);
        mpfr_init(r9539);
        mpfr_init_set_str(r9540, "3", 10, MPFR_RNDN);
        mpfr_init(r9541);
        mpfr_init(r9542);
        mpfr_init(r9543);
        mpfr_init(r9544);
        mpfr_init(r9545);
        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);
}

double f_fm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9530, lambda1, MPFR_RNDN);
        mpfr_set_d(r9531, phi1, MPFR_RNDN);
        mpfr_cos(r9532, r9531, MPFR_RNDN);
        mpfr_set_d(r9533, delta, MPFR_RNDN);
        mpfr_sin(r9534, r9533, MPFR_RNDN);
        mpfr_set_d(r9535, theta, MPFR_RNDN);
        mpfr_sin(r9536, r9535, MPFR_RNDN);
        mpfr_mul(r9537, r9534, r9536, MPFR_RNDN);
        mpfr_mul(r9538, r9532, r9537, MPFR_RNDN);
        mpfr_cos(r9539, r9533, MPFR_RNDN);
        ;
        mpfr_pow(r9541, r9539, r9540, MPFR_RNDN);
        mpfr_sin(r9542, r9531, MPFR_RNDN);
        mpfr_mul(r9543, r9539, r9542, MPFR_RNDN);
        mpfr_cos(r9544, r9535, MPFR_RNDN);
        mpfr_mul(r9545, r9532, r9534, MPFR_RNDN);
        mpfr_mul(r9546, r9544, r9545, MPFR_RNDN);
        mpfr_add(r9547, r9543, r9546, MPFR_RNDN);
        mpfr_asin(r9548, r9547, MPFR_RNDN);
        mpfr_sin(r9549, r9548, MPFR_RNDN);
        mpfr_mul(r9550, r9542, r9549, MPFR_RNDN);
        mpfr_pow(r9551, r9550, r9540, MPFR_RNDN);
        mpfr_sub(r9552, r9541, r9551, MPFR_RNDN);
        mpfr_mul(r9553, r9539, r9539, MPFR_RNDN);
        mpfr_mul(r9554, r9548, r9548, MPFR_RNDN);
        mpfr_mul(r9555, r9554, r9548, MPFR_RNDN);
        mpfr_cbrt(r9556, r9555, MPFR_RNDN);
        mpfr_sin(r9557, r9556, MPFR_RNDN);
        mpfr_mul(r9558, r9542, r9557, MPFR_RNDN);
        mpfr_mul(r9559, r9558, r9539, MPFR_RNDN);
        mpfr_mul(r9560, r9550, r9550, MPFR_RNDN);
        mpfr_add(r9561, r9559, r9560, MPFR_RNDN);
        mpfr_add(r9562, r9553, r9561, MPFR_RNDN);
        mpfr_div(r9563, r9552, r9562, MPFR_RNDN);
        mpfr_atan2(r9564, r9538, r9563, MPFR_RNDN);
        mpfr_add(r9565, r9530, r9564, MPFR_RNDN);
        return mpfr_get_d(r9565, MPFR_RNDN);
}

static mpfr_t r9566, r9567, r9568, r9569, r9570, r9571, r9572, r9573, r9574, r9575, r9576, r9577, r9578, r9579, r9580, r9581, r9582, r9583, r9584, r9585, r9586, r9587, r9588, r9589, r9590, r9591, r9592, r9593, r9594, r9595, r9596, r9597, r9598, r9599, r9600, r9601;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9566);
        mpfr_init(r9567);
        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_set_str(r9576, "3", 10, MPFR_RNDN);
        mpfr_init(r9577);
        mpfr_init(r9578);
        mpfr_init(r9579);
        mpfr_init(r9580);
        mpfr_init(r9581);
        mpfr_init(r9582);
        mpfr_init(r9583);
        mpfr_init(r9584);
        mpfr_init(r9585);
        mpfr_init(r9586);
        mpfr_init(r9587);
        mpfr_init(r9588);
        mpfr_init(r9589);
        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);
}

double f_dm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9566, lambda1, MPFR_RNDN);
        mpfr_set_d(r9567, phi1, MPFR_RNDN);
        mpfr_cos(r9568, r9567, MPFR_RNDN);
        mpfr_set_d(r9569, delta, MPFR_RNDN);
        mpfr_sin(r9570, r9569, MPFR_RNDN);
        mpfr_set_d(r9571, theta, MPFR_RNDN);
        mpfr_sin(r9572, r9571, MPFR_RNDN);
        mpfr_mul(r9573, r9570, r9572, MPFR_RNDN);
        mpfr_mul(r9574, r9568, r9573, MPFR_RNDN);
        mpfr_cos(r9575, r9569, MPFR_RNDN);
        ;
        mpfr_pow(r9577, r9575, r9576, MPFR_RNDN);
        mpfr_sin(r9578, r9567, MPFR_RNDN);
        mpfr_mul(r9579, r9575, r9578, MPFR_RNDN);
        mpfr_cos(r9580, r9571, MPFR_RNDN);
        mpfr_mul(r9581, r9568, r9570, MPFR_RNDN);
        mpfr_mul(r9582, r9580, r9581, MPFR_RNDN);
        mpfr_add(r9583, r9579, r9582, MPFR_RNDN);
        mpfr_asin(r9584, r9583, MPFR_RNDN);
        mpfr_sin(r9585, r9584, MPFR_RNDN);
        mpfr_mul(r9586, r9578, r9585, MPFR_RNDN);
        mpfr_pow(r9587, r9586, r9576, MPFR_RNDN);
        mpfr_sub(r9588, r9577, r9587, MPFR_RNDN);
        mpfr_mul(r9589, r9575, r9575, MPFR_RNDN);
        mpfr_mul(r9590, r9584, r9584, MPFR_RNDN);
        mpfr_mul(r9591, r9590, r9584, MPFR_RNDN);
        mpfr_cbrt(r9592, r9591, MPFR_RNDN);
        mpfr_sin(r9593, r9592, MPFR_RNDN);
        mpfr_mul(r9594, r9578, r9593, MPFR_RNDN);
        mpfr_mul(r9595, r9594, r9575, MPFR_RNDN);
        mpfr_mul(r9596, r9586, r9586, MPFR_RNDN);
        mpfr_add(r9597, r9595, r9596, MPFR_RNDN);
        mpfr_add(r9598, r9589, r9597, MPFR_RNDN);
        mpfr_div(r9599, r9588, r9598, MPFR_RNDN);
        mpfr_atan2(r9600, r9574, r9599, MPFR_RNDN);
        mpfr_add(r9601, r9566, r9600, MPFR_RNDN);
        return mpfr_get_d(r9601, MPFR_RNDN);
}

