#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 r26348 = lambda1;
        float r26349 = lambda2;
        float r26350 = r26348 - r26349;
        float r26351 = sin(r26350);
        float r26352 = phi2;
        float r26353 = cos(r26352);
        float r26354 = r26351 * r26353;
        float r26355 = phi1;
        float r26356 = cos(r26355);
        float r26357 = sin(r26352);
        float r26358 = r26356 * r26357;
        float r26359 = sin(r26355);
        float r26360 = r26359 * r26353;
        float r26361 = cos(r26350);
        float r26362 = r26360 * r26361;
        float r26363 = r26358 - r26362;
        float r26364 = atan2(r26354, r26363);
        return r26364;
}

double f_id(double lambda1, double lambda2, double phi1, double phi2) {
        double r26365 = lambda1;
        double r26366 = lambda2;
        double r26367 = r26365 - r26366;
        double r26368 = sin(r26367);
        double r26369 = phi2;
        double r26370 = cos(r26369);
        double r26371 = r26368 * r26370;
        double r26372 = phi1;
        double r26373 = cos(r26372);
        double r26374 = sin(r26369);
        double r26375 = r26373 * r26374;
        double r26376 = sin(r26372);
        double r26377 = r26376 * r26370;
        double r26378 = cos(r26367);
        double r26379 = r26377 * r26378;
        double r26380 = r26375 - r26379;
        double r26381 = atan2(r26371, r26380);
        return r26381;
}


double f_of(float lambda1, float lambda2, float phi1, float phi2) {
        float r26382 = lambda1;
        float r26383 = sin(r26382);
        float r26384 = lambda2;
        float r26385 = cos(r26384);
        float r26386 = r26383 * r26385;
        float r26387 = cos(r26382);
        float r26388 = -r26384;
        float r26389 = sin(r26388);
        float r26390 = r26387 * r26389;
        float r26391 = r26386 + r26390;
        float r26392 = phi2;
        float r26393 = cos(r26392);
        float r26394 = r26391 * r26393;
        float r26395 = phi1;
        float r26396 = cos(r26395);
        float r26397 = sin(r26392);
        float r26398 = r26396 * r26397;
        float r26399 = sin(r26395);
        float r26400 = r26399 * r26393;
        float r26401 = sin(r26384);
        float r26402 = r26383 * r26401;
        float r26403 = fma(r26385, r26387, r26402);
        float r26404 = 3;
        float r26405 = pow(r26403, r26404);
        float r26406 = cbrt(r26405);
        float r26407 = r26400 * r26406;
        float r26408 = r26398 - r26407;
        float r26409 = atan2(r26394, r26408);
        return r26409;
}

double f_od(double lambda1, double lambda2, double phi1, double phi2) {
        double r26410 = lambda1;
        double r26411 = sin(r26410);
        double r26412 = lambda2;
        double r26413 = cos(r26412);
        double r26414 = r26411 * r26413;
        double r26415 = cos(r26410);
        double r26416 = -r26412;
        double r26417 = sin(r26416);
        double r26418 = r26415 * r26417;
        double r26419 = r26414 + r26418;
        double r26420 = phi2;
        double r26421 = cos(r26420);
        double r26422 = r26419 * r26421;
        double r26423 = phi1;
        double r26424 = cos(r26423);
        double r26425 = sin(r26420);
        double r26426 = r26424 * r26425;
        double r26427 = sin(r26423);
        double r26428 = r26427 * r26421;
        double r26429 = sin(r26412);
        double r26430 = r26411 * r26429;
        double r26431 = fma(r26413, r26415, r26430);
        double r26432 = 3;
        double r26433 = pow(r26431, r26432);
        double r26434 = cbrt(r26433);
        double r26435 = r26428 * r26434;
        double r26436 = r26426 - r26435;
        double r26437 = atan2(r26422, r26436);
        return r26437;
}

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 r26438, r26439, r26440, r26441, r26442, r26443, r26444, r26445, r26446, r26447, r26448, r26449, r26450, r26451, r26452, r26453, r26454;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26438);
        mpfr_init(r26439);
        mpfr_init(r26440);
        mpfr_init(r26441);
        mpfr_init(r26442);
        mpfr_init(r26443);
        mpfr_init(r26444);
        mpfr_init(r26445);
        mpfr_init(r26446);
        mpfr_init(r26447);
        mpfr_init(r26448);
        mpfr_init(r26449);
        mpfr_init(r26450);
        mpfr_init(r26451);
        mpfr_init(r26452);
        mpfr_init(r26453);
        mpfr_init(r26454);
}

double f_im(double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r26438, lambda1, MPFR_RNDN);
        mpfr_set_d(r26439, lambda2, MPFR_RNDN);
        mpfr_sub(r26440, r26438, r26439, MPFR_RNDN);
        mpfr_sin(r26441, r26440, MPFR_RNDN);
        mpfr_set_d(r26442, phi2, MPFR_RNDN);
        mpfr_cos(r26443, r26442, MPFR_RNDN);
        mpfr_mul(r26444, r26441, r26443, MPFR_RNDN);
        mpfr_set_d(r26445, phi1, MPFR_RNDN);
        mpfr_cos(r26446, r26445, MPFR_RNDN);
        mpfr_sin(r26447, r26442, MPFR_RNDN);
        mpfr_mul(r26448, r26446, r26447, MPFR_RNDN);
        mpfr_sin(r26449, r26445, MPFR_RNDN);
        mpfr_mul(r26450, r26449, r26443, MPFR_RNDN);
        mpfr_cos(r26451, r26440, MPFR_RNDN);
        mpfr_mul(r26452, r26450, r26451, MPFR_RNDN);
        mpfr_sub(r26453, r26448, r26452, MPFR_RNDN);
        mpfr_atan2(r26454, r26444, r26453, MPFR_RNDN);
        return mpfr_get_d(r26454, MPFR_RNDN);
}

static mpfr_t r26455, r26456, r26457, r26458, r26459, r26460, r26461, r26462, r26463, r26464, r26465, r26466, r26467, r26468, r26469, r26470, r26471, r26472, r26473, r26474, r26475, r26476, r26477, r26478, r26479, r26480, r26481, r26482;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26455);
        mpfr_init(r26456);
        mpfr_init(r26457);
        mpfr_init(r26458);
        mpfr_init(r26459);
        mpfr_init(r26460);
        mpfr_init(r26461);
        mpfr_init(r26462);
        mpfr_init(r26463);
        mpfr_init(r26464);
        mpfr_init(r26465);
        mpfr_init(r26466);
        mpfr_init(r26467);
        mpfr_init(r26468);
        mpfr_init(r26469);
        mpfr_init(r26470);
        mpfr_init(r26471);
        mpfr_init(r26472);
        mpfr_init(r26473);
        mpfr_init(r26474);
        mpfr_init(r26475);
        mpfr_init(r26476);
        mpfr_init_set_str(r26477, "3", 10, MPFR_RNDN);
        mpfr_init(r26478);
        mpfr_init(r26479);
        mpfr_init(r26480);
        mpfr_init(r26481);
        mpfr_init(r26482);
}

double f_fm(double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r26455, lambda1, MPFR_RNDN);
        mpfr_sin(r26456, r26455, MPFR_RNDN);
        mpfr_set_d(r26457, lambda2, MPFR_RNDN);
        mpfr_cos(r26458, r26457, MPFR_RNDN);
        mpfr_mul(r26459, r26456, r26458, MPFR_RNDN);
        mpfr_cos(r26460, r26455, MPFR_RNDN);
        mpfr_neg(r26461, r26457, MPFR_RNDN);
        mpfr_sin(r26462, r26461, MPFR_RNDN);
        mpfr_mul(r26463, r26460, r26462, MPFR_RNDN);
        mpfr_add(r26464, r26459, r26463, MPFR_RNDN);
        mpfr_set_d(r26465, phi2, MPFR_RNDN);
        mpfr_cos(r26466, r26465, MPFR_RNDN);
        mpfr_mul(r26467, r26464, r26466, MPFR_RNDN);
        mpfr_set_d(r26468, phi1, MPFR_RNDN);
        mpfr_cos(r26469, r26468, MPFR_RNDN);
        mpfr_sin(r26470, r26465, MPFR_RNDN);
        mpfr_mul(r26471, r26469, r26470, MPFR_RNDN);
        mpfr_sin(r26472, r26468, MPFR_RNDN);
        mpfr_mul(r26473, r26472, r26466, MPFR_RNDN);
        mpfr_sin(r26474, r26457, MPFR_RNDN);
        mpfr_mul(r26475, r26456, r26474, MPFR_RNDN);
        mpfr_fma(r26476, r26458, r26460, r26475, MPFR_RNDN);
        ;
        mpfr_pow(r26478, r26476, r26477, MPFR_RNDN);
        mpfr_cbrt(r26479, r26478, MPFR_RNDN);
        mpfr_mul(r26480, r26473, r26479, MPFR_RNDN);
        mpfr_sub(r26481, r26471, r26480, MPFR_RNDN);
        mpfr_atan2(r26482, r26467, r26481, MPFR_RNDN);
        return mpfr_get_d(r26482, MPFR_RNDN);
}

static mpfr_t r26483, r26484, r26485, r26486, r26487, r26488, r26489, r26490, r26491, r26492, r26493, r26494, r26495, r26496, r26497, r26498, r26499, r26500, r26501, r26502, r26503, r26504, r26505, r26506, r26507, r26508, r26509, r26510;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26483);
        mpfr_init(r26484);
        mpfr_init(r26485);
        mpfr_init(r26486);
        mpfr_init(r26487);
        mpfr_init(r26488);
        mpfr_init(r26489);
        mpfr_init(r26490);
        mpfr_init(r26491);
        mpfr_init(r26492);
        mpfr_init(r26493);
        mpfr_init(r26494);
        mpfr_init(r26495);
        mpfr_init(r26496);
        mpfr_init(r26497);
        mpfr_init(r26498);
        mpfr_init(r26499);
        mpfr_init(r26500);
        mpfr_init(r26501);
        mpfr_init(r26502);
        mpfr_init(r26503);
        mpfr_init(r26504);
        mpfr_init_set_str(r26505, "3", 10, MPFR_RNDN);
        mpfr_init(r26506);
        mpfr_init(r26507);
        mpfr_init(r26508);
        mpfr_init(r26509);
        mpfr_init(r26510);
}

double f_dm(double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r26483, lambda1, MPFR_RNDN);
        mpfr_sin(r26484, r26483, MPFR_RNDN);
        mpfr_set_d(r26485, lambda2, MPFR_RNDN);
        mpfr_cos(r26486, r26485, MPFR_RNDN);
        mpfr_mul(r26487, r26484, r26486, MPFR_RNDN);
        mpfr_cos(r26488, r26483, MPFR_RNDN);
        mpfr_neg(r26489, r26485, MPFR_RNDN);
        mpfr_sin(r26490, r26489, MPFR_RNDN);
        mpfr_mul(r26491, r26488, r26490, MPFR_RNDN);
        mpfr_add(r26492, r26487, r26491, MPFR_RNDN);
        mpfr_set_d(r26493, phi2, MPFR_RNDN);
        mpfr_cos(r26494, r26493, MPFR_RNDN);
        mpfr_mul(r26495, r26492, r26494, MPFR_RNDN);
        mpfr_set_d(r26496, phi1, MPFR_RNDN);
        mpfr_cos(r26497, r26496, MPFR_RNDN);
        mpfr_sin(r26498, r26493, MPFR_RNDN);
        mpfr_mul(r26499, r26497, r26498, MPFR_RNDN);
        mpfr_sin(r26500, r26496, MPFR_RNDN);
        mpfr_mul(r26501, r26500, r26494, MPFR_RNDN);
        mpfr_sin(r26502, r26485, MPFR_RNDN);
        mpfr_mul(r26503, r26484, r26502, MPFR_RNDN);
        mpfr_fma(r26504, r26486, r26488, r26503, MPFR_RNDN);
        ;
        mpfr_pow(r26506, r26504, r26505, MPFR_RNDN);
        mpfr_cbrt(r26507, r26506, MPFR_RNDN);
        mpfr_mul(r26508, r26501, r26507, MPFR_RNDN);
        mpfr_sub(r26509, r26499, r26508, MPFR_RNDN);
        mpfr_atan2(r26510, r26495, r26509, MPFR_RNDN);
        return mpfr_get_d(r26510, MPFR_RNDN);
}

