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

char *name = "Equirectangular approximation to distance on a great circle";

double f_if(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r31346 = R;
        float r31347 = lambda1;
        float r31348 = lambda2;
        float r31349 = r31347 - r31348;
        float r31350 = phi1;
        float r31351 = phi2;
        float r31352 = r31350 + r31351;
        float r31353 = 2.0f;
        float r31354 = r31352 / r31353;
        float r31355 = cos(r31354);
        float r31356 = r31349 * r31355;
        float r31357 = r31356 * r31356;
        float r31358 = r31350 - r31351;
        float r31359 = r31358 * r31358;
        float r31360 = r31357 + r31359;
        float r31361 = sqrt(r31360);
        float r31362 = r31346 * r31361;
        return r31362;
}

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r31363 = R;
        double r31364 = lambda1;
        double r31365 = lambda2;
        double r31366 = r31364 - r31365;
        double r31367 = phi1;
        double r31368 = phi2;
        double r31369 = r31367 + r31368;
        double r31370 = 2.0;
        double r31371 = r31369 / r31370;
        double r31372 = cos(r31371);
        double r31373 = r31366 * r31372;
        double r31374 = r31373 * r31373;
        double r31375 = r31367 - r31368;
        double r31376 = r31375 * r31375;
        double r31377 = r31374 + r31376;
        double r31378 = sqrt(r31377);
        double r31379 = r31363 * r31378;
        return r31379;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r31380 = phi2;
        float r31381 = -4.105018222076383e+161f;
        bool r31382 = r31380 <= r31381;
        float r31383 = R;
        float r31384 = 0.5f;
        float r31385 = 1.0f;
        float r31386 = phi1;
        float r31387 = r31385 / r31386;
        float r31388 = r31385 / r31380;
        float r31389 = r31387 + r31388;
        float r31390 = r31384 * r31389;
        float r31391 = cos(r31390);
        float r31392 = r31391 * r31391;
        float r31393 = r31392 * r31380;
        float r31394 = lambda1;
        float r31395 = r31394 * r31394;
        float r31396 = r31386 * r31386;
        float r31397 = r31395 * r31396;
        float r31398 = r31393 / r31397;
        float r31399 = r31384 * r31398;
        float r31400 = r31399 + r31386;
        float r31401 = r31400 - r31380;
        float r31402 = r31383 * r31401;
        float r31403 = 8.289315905944159e+107f;
        bool r31404 = r31380 <= r31403;
        float r31405 = lambda2;
        float r31406 = r31394 - r31405;
        float r31407 = r31386 + r31380;
        float r31408 = 2.0f;
        float r31409 = r31407 / r31408;
        float r31410 = cos(r31409);
        float r31411 = r31406 * r31410;
        float r31412 = r31411 * r31411;
        float r31413 = r31386 - r31380;
        float r31414 = r31413 * r31413;
        float r31415 = r31412 + r31414;
        float r31416 = sqrt(r31415);
        float r31417 = r31383 * r31416;
        float r31418 = r31380 - r31386;
        float r31419 = r31383 * r31418;
        float r31420 = r31404 ? r31417 : r31419;
        float r31421 = r31382 ? r31402 : r31420;
        return r31421;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r31422 = phi2;
        double r31423 = -4.105018222076383e+161;
        bool r31424 = r31422 <= r31423;
        double r31425 = R;
        double r31426 = 0.5;
        double r31427 = 1.0;
        double r31428 = phi1;
        double r31429 = r31427 / r31428;
        double r31430 = r31427 / r31422;
        double r31431 = r31429 + r31430;
        double r31432 = r31426 * r31431;
        double r31433 = cos(r31432);
        double r31434 = r31433 * r31433;
        double r31435 = r31434 * r31422;
        double r31436 = lambda1;
        double r31437 = r31436 * r31436;
        double r31438 = r31428 * r31428;
        double r31439 = r31437 * r31438;
        double r31440 = r31435 / r31439;
        double r31441 = r31426 * r31440;
        double r31442 = r31441 + r31428;
        double r31443 = r31442 - r31422;
        double r31444 = r31425 * r31443;
        double r31445 = 8.289315905944159e+107;
        bool r31446 = r31422 <= r31445;
        double r31447 = lambda2;
        double r31448 = r31436 - r31447;
        double r31449 = r31428 + r31422;
        double r31450 = 2.0;
        double r31451 = r31449 / r31450;
        double r31452 = cos(r31451);
        double r31453 = r31448 * r31452;
        double r31454 = r31453 * r31453;
        double r31455 = r31428 - r31422;
        double r31456 = r31455 * r31455;
        double r31457 = r31454 + r31456;
        double r31458 = sqrt(r31457);
        double r31459 = r31425 * r31458;
        double r31460 = r31422 - r31428;
        double r31461 = r31425 * r31460;
        double r31462 = r31446 ? r31459 : r31461;
        double r31463 = r31424 ? r31444 : r31462;
        return r31463;
}

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 r31464, r31465, r31466, r31467, r31468, r31469, r31470, r31471, r31472, r31473, r31474, r31475, r31476, r31477, r31478, r31479, r31480;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r31464);
        mpfr_init(r31465);
        mpfr_init(r31466);
        mpfr_init(r31467);
        mpfr_init(r31468);
        mpfr_init(r31469);
        mpfr_init(r31470);
        mpfr_init_set_str(r31471, "2", 10, MPFR_RNDN);
        mpfr_init(r31472);
        mpfr_init(r31473);
        mpfr_init(r31474);
        mpfr_init(r31475);
        mpfr_init(r31476);
        mpfr_init(r31477);
        mpfr_init(r31478);
        mpfr_init(r31479);
        mpfr_init(r31480);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r31464, R, MPFR_RNDN);
        mpfr_set_d(r31465, lambda1, MPFR_RNDN);
        mpfr_set_d(r31466, lambda2, MPFR_RNDN);
        mpfr_sub(r31467, r31465, r31466, MPFR_RNDN);
        mpfr_set_d(r31468, phi1, MPFR_RNDN);
        mpfr_set_d(r31469, phi2, MPFR_RNDN);
        mpfr_add(r31470, r31468, r31469, MPFR_RNDN);
        ;
        mpfr_div(r31472, r31470, r31471, MPFR_RNDN);
        mpfr_cos(r31473, r31472, MPFR_RNDN);
        mpfr_mul(r31474, r31467, r31473, MPFR_RNDN);
        mpfr_sqr(r31475, r31474, MPFR_RNDN);
        mpfr_sub(r31476, r31468, r31469, MPFR_RNDN);
        mpfr_sqr(r31477, r31476, MPFR_RNDN);
        mpfr_add(r31478, r31475, r31477, MPFR_RNDN);
        mpfr_sqrt(r31479, r31478, MPFR_RNDN);
        mpfr_mul(r31480, r31464, r31479, MPFR_RNDN);
        return mpfr_get_d(r31480, MPFR_RNDN);
}

static mpfr_t r31481, r31482, r31483, r31484, r31485, r31486, r31487, r31488, r31489, r31490, r31491, r31492, r31493, r31494, r31495, r31496, r31497, r31498, r31499, r31500, r31501, r31502, r31503, r31504, r31505, r31506, r31507, r31508, r31509, r31510, r31511, r31512, r31513, r31514, r31515, r31516, r31517, r31518, r31519, r31520, r31521, r31522;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r31481);
        mpfr_init_set_str(r31482, "-4.105018222076383e+161", 10, MPFR_RNDN);
        mpfr_init(r31483);
        mpfr_init(r31484);
        mpfr_init_set_str(r31485, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r31486, "1", 10, MPFR_RNDN);
        mpfr_init(r31487);
        mpfr_init(r31488);
        mpfr_init(r31489);
        mpfr_init(r31490);
        mpfr_init(r31491);
        mpfr_init(r31492);
        mpfr_init(r31493);
        mpfr_init(r31494);
        mpfr_init(r31495);
        mpfr_init(r31496);
        mpfr_init(r31497);
        mpfr_init(r31498);
        mpfr_init(r31499);
        mpfr_init(r31500);
        mpfr_init(r31501);
        mpfr_init(r31502);
        mpfr_init(r31503);
        mpfr_init_set_str(r31504, "8.289315905944159e+107", 10, MPFR_RNDN);
        mpfr_init(r31505);
        mpfr_init(r31506);
        mpfr_init(r31507);
        mpfr_init(r31508);
        mpfr_init_set_str(r31509, "2", 10, MPFR_RNDN);
        mpfr_init(r31510);
        mpfr_init(r31511);
        mpfr_init(r31512);
        mpfr_init(r31513);
        mpfr_init(r31514);
        mpfr_init(r31515);
        mpfr_init(r31516);
        mpfr_init(r31517);
        mpfr_init(r31518);
        mpfr_init(r31519);
        mpfr_init(r31520);
        mpfr_init(r31521);
        mpfr_init(r31522);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r31481, phi2, MPFR_RNDN);
        ;
        mpfr_set_si(r31483, mpfr_cmp(r31481, r31482) <= 0, MPFR_RNDN);
        mpfr_set_d(r31484, R, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r31487, phi1, MPFR_RNDN);
        mpfr_div(r31488, r31486, r31487, MPFR_RNDN);
        mpfr_div(r31489, r31486, r31481, MPFR_RNDN);
        mpfr_add(r31490, r31488, r31489, MPFR_RNDN);
        mpfr_mul(r31491, r31485, r31490, MPFR_RNDN);
        mpfr_cos(r31492, r31491, MPFR_RNDN);
        mpfr_sqr(r31493, r31492, MPFR_RNDN);
        mpfr_mul(r31494, r31493, r31481, MPFR_RNDN);
        mpfr_set_d(r31495, lambda1, MPFR_RNDN);
        mpfr_sqr(r31496, r31495, MPFR_RNDN);
        mpfr_sqr(r31497, r31487, MPFR_RNDN);
        mpfr_mul(r31498, r31496, r31497, MPFR_RNDN);
        mpfr_div(r31499, r31494, r31498, MPFR_RNDN);
        mpfr_mul(r31500, r31485, r31499, MPFR_RNDN);
        mpfr_add(r31501, r31500, r31487, MPFR_RNDN);
        mpfr_sub(r31502, r31501, r31481, MPFR_RNDN);
        mpfr_mul(r31503, r31484, r31502, MPFR_RNDN);
        ;
        mpfr_set_si(r31505, mpfr_cmp(r31481, r31504) <= 0, MPFR_RNDN);
        mpfr_set_d(r31506, lambda2, MPFR_RNDN);
        mpfr_sub(r31507, r31495, r31506, MPFR_RNDN);
        mpfr_add(r31508, r31487, r31481, MPFR_RNDN);
        ;
        mpfr_div(r31510, r31508, r31509, MPFR_RNDN);
        mpfr_cos(r31511, r31510, MPFR_RNDN);
        mpfr_mul(r31512, r31507, r31511, MPFR_RNDN);
        mpfr_sqr(r31513, r31512, MPFR_RNDN);
        mpfr_sub(r31514, r31487, r31481, MPFR_RNDN);
        mpfr_sqr(r31515, r31514, MPFR_RNDN);
        mpfr_add(r31516, r31513, r31515, MPFR_RNDN);
        mpfr_sqrt(r31517, r31516, MPFR_RNDN);
        mpfr_mul(r31518, r31484, r31517, MPFR_RNDN);
        mpfr_sub(r31519, r31481, r31487, MPFR_RNDN);
        mpfr_mul(r31520, r31484, r31519, MPFR_RNDN);
        if (mpfr_get_si(r31505, MPFR_RNDN)) { mpfr_set(r31521, r31518, MPFR_RNDN); } else { mpfr_set(r31521, r31520, MPFR_RNDN); };
        if (mpfr_get_si(r31483, MPFR_RNDN)) { mpfr_set(r31522, r31503, MPFR_RNDN); } else { mpfr_set(r31522, r31521, MPFR_RNDN); };
        return mpfr_get_d(r31522, MPFR_RNDN);
}

static mpfr_t r31523, r31524, r31525, r31526, r31527, r31528, r31529, r31530, r31531, r31532, r31533, r31534, r31535, r31536, r31537, r31538, r31539, r31540, r31541, r31542, r31543, r31544, r31545, r31546, r31547, r31548, r31549, r31550, r31551, r31552, r31553, r31554, r31555, r31556, r31557, r31558, r31559, r31560, r31561, r31562, r31563, r31564;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r31523);
        mpfr_init_set_str(r31524, "-4.105018222076383e+161", 10, MPFR_RNDN);
        mpfr_init(r31525);
        mpfr_init(r31526);
        mpfr_init_set_str(r31527, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r31528, "1", 10, MPFR_RNDN);
        mpfr_init(r31529);
        mpfr_init(r31530);
        mpfr_init(r31531);
        mpfr_init(r31532);
        mpfr_init(r31533);
        mpfr_init(r31534);
        mpfr_init(r31535);
        mpfr_init(r31536);
        mpfr_init(r31537);
        mpfr_init(r31538);
        mpfr_init(r31539);
        mpfr_init(r31540);
        mpfr_init(r31541);
        mpfr_init(r31542);
        mpfr_init(r31543);
        mpfr_init(r31544);
        mpfr_init(r31545);
        mpfr_init_set_str(r31546, "8.289315905944159e+107", 10, MPFR_RNDN);
        mpfr_init(r31547);
        mpfr_init(r31548);
        mpfr_init(r31549);
        mpfr_init(r31550);
        mpfr_init_set_str(r31551, "2", 10, MPFR_RNDN);
        mpfr_init(r31552);
        mpfr_init(r31553);
        mpfr_init(r31554);
        mpfr_init(r31555);
        mpfr_init(r31556);
        mpfr_init(r31557);
        mpfr_init(r31558);
        mpfr_init(r31559);
        mpfr_init(r31560);
        mpfr_init(r31561);
        mpfr_init(r31562);
        mpfr_init(r31563);
        mpfr_init(r31564);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r31523, phi2, MPFR_RNDN);
        ;
        mpfr_set_si(r31525, mpfr_cmp(r31523, r31524) <= 0, MPFR_RNDN);
        mpfr_set_d(r31526, R, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r31529, phi1, MPFR_RNDN);
        mpfr_div(r31530, r31528, r31529, MPFR_RNDN);
        mpfr_div(r31531, r31528, r31523, MPFR_RNDN);
        mpfr_add(r31532, r31530, r31531, MPFR_RNDN);
        mpfr_mul(r31533, r31527, r31532, MPFR_RNDN);
        mpfr_cos(r31534, r31533, MPFR_RNDN);
        mpfr_sqr(r31535, r31534, MPFR_RNDN);
        mpfr_mul(r31536, r31535, r31523, MPFR_RNDN);
        mpfr_set_d(r31537, lambda1, MPFR_RNDN);
        mpfr_sqr(r31538, r31537, MPFR_RNDN);
        mpfr_sqr(r31539, r31529, MPFR_RNDN);
        mpfr_mul(r31540, r31538, r31539, MPFR_RNDN);
        mpfr_div(r31541, r31536, r31540, MPFR_RNDN);
        mpfr_mul(r31542, r31527, r31541, MPFR_RNDN);
        mpfr_add(r31543, r31542, r31529, MPFR_RNDN);
        mpfr_sub(r31544, r31543, r31523, MPFR_RNDN);
        mpfr_mul(r31545, r31526, r31544, MPFR_RNDN);
        ;
        mpfr_set_si(r31547, mpfr_cmp(r31523, r31546) <= 0, MPFR_RNDN);
        mpfr_set_d(r31548, lambda2, MPFR_RNDN);
        mpfr_sub(r31549, r31537, r31548, MPFR_RNDN);
        mpfr_add(r31550, r31529, r31523, MPFR_RNDN);
        ;
        mpfr_div(r31552, r31550, r31551, MPFR_RNDN);
        mpfr_cos(r31553, r31552, MPFR_RNDN);
        mpfr_mul(r31554, r31549, r31553, MPFR_RNDN);
        mpfr_sqr(r31555, r31554, MPFR_RNDN);
        mpfr_sub(r31556, r31529, r31523, MPFR_RNDN);
        mpfr_sqr(r31557, r31556, MPFR_RNDN);
        mpfr_add(r31558, r31555, r31557, MPFR_RNDN);
        mpfr_sqrt(r31559, r31558, MPFR_RNDN);
        mpfr_mul(r31560, r31526, r31559, MPFR_RNDN);
        mpfr_sub(r31561, r31523, r31529, MPFR_RNDN);
        mpfr_mul(r31562, r31526, r31561, MPFR_RNDN);
        if (mpfr_get_si(r31547, MPFR_RNDN)) { mpfr_set(r31563, r31560, MPFR_RNDN); } else { mpfr_set(r31563, r31562, MPFR_RNDN); };
        if (mpfr_get_si(r31525, MPFR_RNDN)) { mpfr_set(r31564, r31545, MPFR_RNDN); } else { mpfr_set(r31564, r31563, MPFR_RNDN); };
        return mpfr_get_d(r31564, MPFR_RNDN);
}

