#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 r9346 = lambda1;
        float r9347 = theta;
        float r9348 = sin(r9347);
        float r9349 = delta;
        float r9350 = sin(r9349);
        float r9351 = r9348 * r9350;
        float r9352 = phi1;
        float r9353 = cos(r9352);
        float r9354 = r9351 * r9353;
        float r9355 = cos(r9349);
        float r9356 = sin(r9352);
        float r9357 = r9356 * r9355;
        float r9358 = r9353 * r9350;
        float r9359 = cos(r9347);
        float r9360 = r9358 * r9359;
        float r9361 = r9357 + r9360;
        float r9362 = asin(r9361);
        float r9363 = sin(r9362);
        float r9364 = r9356 * r9363;
        float r9365 = r9355 - r9364;
        float r9366 = atan2(r9354, r9365);
        float r9367 = r9346 + r9366;
        return r9367;
}

double f_id(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r9368 = lambda1;
        double r9369 = theta;
        double r9370 = sin(r9369);
        double r9371 = delta;
        double r9372 = sin(r9371);
        double r9373 = r9370 * r9372;
        double r9374 = phi1;
        double r9375 = cos(r9374);
        double r9376 = r9373 * r9375;
        double r9377 = cos(r9371);
        double r9378 = sin(r9374);
        double r9379 = r9378 * r9377;
        double r9380 = r9375 * r9372;
        double r9381 = cos(r9369);
        double r9382 = r9380 * r9381;
        double r9383 = r9379 + r9382;
        double r9384 = asin(r9383);
        double r9385 = sin(r9384);
        double r9386 = r9378 * r9385;
        double r9387 = r9377 - r9386;
        double r9388 = atan2(r9376, r9387);
        double r9389 = r9368 + r9388;
        return r9389;
}


double f_of(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r9390 = phi1;
        float r9391 = cos(r9390);
        float r9392 = delta;
        float r9393 = sin(r9392);
        float r9394 = theta;
        float r9395 = sin(r9394);
        float r9396 = r9393 * r9395;
        float r9397 = r9391 * r9396;
        float r9398 = cos(r9392);
        float r9399 = sin(r9390);
        float r9400 = r9398 * r9399;
        float r9401 = cos(r9394);
        float r9402 = r9391 * r9393;
        float r9403 = r9401 * r9402;
        float r9404 = r9400 + r9403;
        float r9405 = asin(r9404);
        float r9406 = r9405 * r9405;
        float r9407 = r9405 * r9406;
        float r9408 = cbrt(r9407);
        float r9409 = sin(r9408);
        float r9410 = r9409 * r9399;
        float r9411 = r9398 - r9410;
        float r9412 = atan2(r9397, r9411);
        float r9413 = lambda1;
        float r9414 = r9412 + r9413;
        return r9414;
}

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

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 r9440, r9441, r9442, r9443, r9444, r9445, r9446, r9447, r9448, r9449, r9450, r9451, r9452, r9453, r9454, r9455, r9456, r9457, r9458, r9459, r9460, r9461;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9440);
        mpfr_init(r9441);
        mpfr_init(r9442);
        mpfr_init(r9443);
        mpfr_init(r9444);
        mpfr_init(r9445);
        mpfr_init(r9446);
        mpfr_init(r9447);
        mpfr_init(r9448);
        mpfr_init(r9449);
        mpfr_init(r9450);
        mpfr_init(r9451);
        mpfr_init(r9452);
        mpfr_init(r9453);
        mpfr_init(r9454);
        mpfr_init(r9455);
        mpfr_init(r9456);
        mpfr_init(r9457);
        mpfr_init(r9458);
        mpfr_init(r9459);
        mpfr_init(r9460);
        mpfr_init(r9461);
}

double f_im(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9440, lambda1, MPFR_RNDN);
        mpfr_set_d(r9441, theta, MPFR_RNDN);
        mpfr_sin(r9442, r9441, MPFR_RNDN);
        mpfr_set_d(r9443, delta, MPFR_RNDN);
        mpfr_sin(r9444, r9443, MPFR_RNDN);
        mpfr_mul(r9445, r9442, r9444, MPFR_RNDN);
        mpfr_set_d(r9446, phi1, MPFR_RNDN);
        mpfr_cos(r9447, r9446, MPFR_RNDN);
        mpfr_mul(r9448, r9445, r9447, MPFR_RNDN);
        mpfr_cos(r9449, r9443, MPFR_RNDN);
        mpfr_sin(r9450, r9446, MPFR_RNDN);
        mpfr_mul(r9451, r9450, r9449, MPFR_RNDN);
        mpfr_mul(r9452, r9447, r9444, MPFR_RNDN);
        mpfr_cos(r9453, r9441, MPFR_RNDN);
        mpfr_mul(r9454, r9452, r9453, MPFR_RNDN);
        mpfr_add(r9455, r9451, r9454, MPFR_RNDN);
        mpfr_asin(r9456, r9455, MPFR_RNDN);
        mpfr_sin(r9457, r9456, MPFR_RNDN);
        mpfr_mul(r9458, r9450, r9457, MPFR_RNDN);
        mpfr_sub(r9459, r9449, r9458, MPFR_RNDN);
        mpfr_atan2(r9460, r9448, r9459, MPFR_RNDN);
        mpfr_add(r9461, r9440, r9460, MPFR_RNDN);
        return mpfr_get_d(r9461, MPFR_RNDN);
}

static mpfr_t r9462, r9463, r9464, r9465, r9466, r9467, r9468, r9469, r9470, r9471, r9472, r9473, r9474, r9475, r9476, r9477, r9478, r9479, r9480, r9481, r9482, r9483, r9484, r9485, r9486;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9462);
        mpfr_init(r9463);
        mpfr_init(r9464);
        mpfr_init(r9465);
        mpfr_init(r9466);
        mpfr_init(r9467);
        mpfr_init(r9468);
        mpfr_init(r9469);
        mpfr_init(r9470);
        mpfr_init(r9471);
        mpfr_init(r9472);
        mpfr_init(r9473);
        mpfr_init(r9474);
        mpfr_init(r9475);
        mpfr_init(r9476);
        mpfr_init(r9477);
        mpfr_init(r9478);
        mpfr_init(r9479);
        mpfr_init(r9480);
        mpfr_init(r9481);
        mpfr_init(r9482);
        mpfr_init(r9483);
        mpfr_init(r9484);
        mpfr_init(r9485);
        mpfr_init(r9486);
}

double f_fm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9462, phi1, MPFR_RNDN);
        mpfr_cos(r9463, r9462, MPFR_RNDN);
        mpfr_set_d(r9464, delta, MPFR_RNDN);
        mpfr_sin(r9465, r9464, MPFR_RNDN);
        mpfr_set_d(r9466, theta, MPFR_RNDN);
        mpfr_sin(r9467, r9466, MPFR_RNDN);
        mpfr_mul(r9468, r9465, r9467, MPFR_RNDN);
        mpfr_mul(r9469, r9463, r9468, MPFR_RNDN);
        mpfr_cos(r9470, r9464, MPFR_RNDN);
        mpfr_sin(r9471, r9462, MPFR_RNDN);
        mpfr_mul(r9472, r9470, r9471, MPFR_RNDN);
        mpfr_cos(r9473, r9466, MPFR_RNDN);
        mpfr_mul(r9474, r9463, r9465, MPFR_RNDN);
        mpfr_mul(r9475, r9473, r9474, MPFR_RNDN);
        mpfr_add(r9476, r9472, r9475, MPFR_RNDN);
        mpfr_asin(r9477, r9476, MPFR_RNDN);
        mpfr_mul(r9478, r9477, r9477, MPFR_RNDN);
        mpfr_mul(r9479, r9477, r9478, MPFR_RNDN);
        mpfr_cbrt(r9480, r9479, MPFR_RNDN);
        mpfr_sin(r9481, r9480, MPFR_RNDN);
        mpfr_mul(r9482, r9481, r9471, MPFR_RNDN);
        mpfr_sub(r9483, r9470, r9482, MPFR_RNDN);
        mpfr_atan2(r9484, r9469, r9483, MPFR_RNDN);
        mpfr_set_d(r9485, lambda1, MPFR_RNDN);
        mpfr_add(r9486, r9484, r9485, MPFR_RNDN);
        return mpfr_get_d(r9486, MPFR_RNDN);
}

static mpfr_t r9487, r9488, r9489, r9490, r9491, r9492, r9493, r9494, r9495, r9496, r9497, r9498, r9499, r9500, r9501, r9502, r9503, r9504, r9505, r9506, r9507, r9508, r9509, r9510, r9511;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9487);
        mpfr_init(r9488);
        mpfr_init(r9489);
        mpfr_init(r9490);
        mpfr_init(r9491);
        mpfr_init(r9492);
        mpfr_init(r9493);
        mpfr_init(r9494);
        mpfr_init(r9495);
        mpfr_init(r9496);
        mpfr_init(r9497);
        mpfr_init(r9498);
        mpfr_init(r9499);
        mpfr_init(r9500);
        mpfr_init(r9501);
        mpfr_init(r9502);
        mpfr_init(r9503);
        mpfr_init(r9504);
        mpfr_init(r9505);
        mpfr_init(r9506);
        mpfr_init(r9507);
        mpfr_init(r9508);
        mpfr_init(r9509);
        mpfr_init(r9510);
        mpfr_init(r9511);
}

double f_dm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r9487, phi1, MPFR_RNDN);
        mpfr_cos(r9488, r9487, MPFR_RNDN);
        mpfr_set_d(r9489, delta, MPFR_RNDN);
        mpfr_sin(r9490, r9489, MPFR_RNDN);
        mpfr_set_d(r9491, theta, MPFR_RNDN);
        mpfr_sin(r9492, r9491, MPFR_RNDN);
        mpfr_mul(r9493, r9490, r9492, MPFR_RNDN);
        mpfr_mul(r9494, r9488, r9493, MPFR_RNDN);
        mpfr_cos(r9495, r9489, MPFR_RNDN);
        mpfr_sin(r9496, r9487, MPFR_RNDN);
        mpfr_mul(r9497, r9495, r9496, MPFR_RNDN);
        mpfr_cos(r9498, r9491, MPFR_RNDN);
        mpfr_mul(r9499, r9488, r9490, MPFR_RNDN);
        mpfr_mul(r9500, r9498, r9499, MPFR_RNDN);
        mpfr_add(r9501, r9497, r9500, MPFR_RNDN);
        mpfr_asin(r9502, r9501, MPFR_RNDN);
        mpfr_mul(r9503, r9502, r9502, MPFR_RNDN);
        mpfr_mul(r9504, r9502, r9503, MPFR_RNDN);
        mpfr_cbrt(r9505, r9504, MPFR_RNDN);
        mpfr_sin(r9506, r9505, MPFR_RNDN);
        mpfr_mul(r9507, r9506, r9496, MPFR_RNDN);
        mpfr_sub(r9508, r9495, r9507, MPFR_RNDN);
        mpfr_atan2(r9509, r9494, r9508, MPFR_RNDN);
        mpfr_set_d(r9510, lambda1, MPFR_RNDN);
        mpfr_add(r9511, r9509, r9510, MPFR_RNDN);
        return mpfr_get_d(r9511, MPFR_RNDN);
}

