#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 r9348 = R;
        float r9349 = lambda1;
        float r9350 = lambda2;
        float r9351 = r9349 - r9350;
        float r9352 = phi1;
        float r9353 = phi2;
        float r9354 = r9352 + r9353;
        float r9355 = 2;
        float r9356 = r9354 / r9355;
        float r9357 = cos(r9356);
        float r9358 = r9351 * r9357;
        float r9359 = r9358 * r9358;
        float r9360 = r9352 - r9353;
        float r9361 = r9360 * r9360;
        float r9362 = r9359 + r9361;
        float r9363 = sqrt(r9362);
        float r9364 = r9348 * r9363;
        return r9364;
}

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r9365 = R;
        double r9366 = lambda1;
        double r9367 = lambda2;
        double r9368 = r9366 - r9367;
        double r9369 = phi1;
        double r9370 = phi2;
        double r9371 = r9369 + r9370;
        double r9372 = 2;
        double r9373 = r9371 / r9372;
        double r9374 = cos(r9373);
        double r9375 = r9368 * r9374;
        double r9376 = r9375 * r9375;
        double r9377 = r9369 - r9370;
        double r9378 = r9377 * r9377;
        double r9379 = r9376 + r9378;
        double r9380 = sqrt(r9379);
        double r9381 = r9365 * r9380;
        return r9381;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r9382 = lambda1;
        float r9383 = lambda2;
        float r9384 = r9382 - r9383;
        float r9385 = phi2;
        float r9386 = phi1;
        float r9387 = r9385 + r9386;
        float r9388 = 2;
        float r9389 = r9387 / r9388;
        float r9390 = cos(r9389);
        float r9391 = log1p(r9390);
        float r9392 = expm1(r9391);
        float r9393 = r9384 * r9392;
        float r9394 = r9386 - r9385;
        float r9395 = hypot(r9393, r9394);
        float r9396 = R;
        float r9397 = r9395 * r9396;
        return r9397;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r9398 = lambda1;
        double r9399 = lambda2;
        double r9400 = r9398 - r9399;
        double r9401 = phi2;
        double r9402 = phi1;
        double r9403 = r9401 + r9402;
        double r9404 = 2;
        double r9405 = r9403 / r9404;
        double r9406 = cos(r9405);
        double r9407 = log1p(r9406);
        double r9408 = expm1(r9407);
        double r9409 = r9400 * r9408;
        double r9410 = r9402 - r9401;
        double r9411 = hypot(r9409, r9410);
        double r9412 = R;
        double r9413 = r9411 * r9412;
        return r9413;
}

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 r9414, r9415, r9416, r9417, r9418, r9419, r9420, r9421, r9422, r9423, r9424, r9425, r9426, r9427, r9428, r9429, r9430;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9414);
        mpfr_init(r9415);
        mpfr_init(r9416);
        mpfr_init(r9417);
        mpfr_init(r9418);
        mpfr_init(r9419);
        mpfr_init(r9420);
        mpfr_init_set_str(r9421, "2", 10, MPFR_RNDN);
        mpfr_init(r9422);
        mpfr_init(r9423);
        mpfr_init(r9424);
        mpfr_init(r9425);
        mpfr_init(r9426);
        mpfr_init(r9427);
        mpfr_init(r9428);
        mpfr_init(r9429);
        mpfr_init(r9430);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r9414, R, MPFR_RNDN);
        mpfr_set_d(r9415, lambda1, MPFR_RNDN);
        mpfr_set_d(r9416, lambda2, MPFR_RNDN);
        mpfr_sub(r9417, r9415, r9416, MPFR_RNDN);
        mpfr_set_d(r9418, phi1, MPFR_RNDN);
        mpfr_set_d(r9419, phi2, MPFR_RNDN);
        mpfr_add(r9420, r9418, r9419, MPFR_RNDN);
        ;
        mpfr_div(r9422, r9420, r9421, MPFR_RNDN);
        mpfr_cos(r9423, r9422, MPFR_RNDN);
        mpfr_mul(r9424, r9417, r9423, MPFR_RNDN);
        mpfr_mul(r9425, r9424, r9424, MPFR_RNDN);
        mpfr_sub(r9426, r9418, r9419, MPFR_RNDN);
        mpfr_mul(r9427, r9426, r9426, MPFR_RNDN);
        mpfr_add(r9428, r9425, r9427, MPFR_RNDN);
        mpfr_sqrt(r9429, r9428, MPFR_RNDN);
        mpfr_mul(r9430, r9414, r9429, MPFR_RNDN);
        return mpfr_get_d(r9430, MPFR_RNDN);
}

static mpfr_t r9431, r9432, r9433, r9434, r9435, r9436, r9437, r9438, r9439, r9440, r9441, r9442, r9443, r9444, r9445, r9446;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9431);
        mpfr_init(r9432);
        mpfr_init(r9433);
        mpfr_init(r9434);
        mpfr_init(r9435);
        mpfr_init(r9436);
        mpfr_init_set_str(r9437, "2", 10, MPFR_RNDN);
        mpfr_init(r9438);
        mpfr_init(r9439);
        mpfr_init(r9440);
        mpfr_init(r9441);
        mpfr_init(r9442);
        mpfr_init(r9443);
        mpfr_init(r9444);
        mpfr_init(r9445);
        mpfr_init(r9446);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r9431, lambda1, MPFR_RNDN);
        mpfr_set_d(r9432, lambda2, MPFR_RNDN);
        mpfr_sub(r9433, r9431, r9432, MPFR_RNDN);
        mpfr_set_d(r9434, phi2, MPFR_RNDN);
        mpfr_set_d(r9435, phi1, MPFR_RNDN);
        mpfr_add(r9436, r9434, r9435, MPFR_RNDN);
        ;
        mpfr_div(r9438, r9436, r9437, MPFR_RNDN);
        mpfr_cos(r9439, r9438, MPFR_RNDN);
        mpfr_log1p(r9440, r9439, MPFR_RNDN);
        mpfr_expm1(r9441, r9440, MPFR_RNDN);
        mpfr_mul(r9442, r9433, r9441, MPFR_RNDN);
        mpfr_sub(r9443, r9435, r9434, MPFR_RNDN);
        mpfr_hypot(r9444, r9442, r9443, MPFR_RNDN);
        mpfr_set_d(r9445, R, MPFR_RNDN);
        mpfr_mul(r9446, r9444, r9445, MPFR_RNDN);
        return mpfr_get_d(r9446, MPFR_RNDN);
}

static mpfr_t r9447, r9448, r9449, r9450, r9451, r9452, r9453, r9454, r9455, r9456, r9457, r9458, r9459, r9460, r9461, r9462;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9447);
        mpfr_init(r9448);
        mpfr_init(r9449);
        mpfr_init(r9450);
        mpfr_init(r9451);
        mpfr_init(r9452);
        mpfr_init_set_str(r9453, "2", 10, MPFR_RNDN);
        mpfr_init(r9454);
        mpfr_init(r9455);
        mpfr_init(r9456);
        mpfr_init(r9457);
        mpfr_init(r9458);
        mpfr_init(r9459);
        mpfr_init(r9460);
        mpfr_init(r9461);
        mpfr_init(r9462);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r9447, lambda1, MPFR_RNDN);
        mpfr_set_d(r9448, lambda2, MPFR_RNDN);
        mpfr_sub(r9449, r9447, r9448, MPFR_RNDN);
        mpfr_set_d(r9450, phi2, MPFR_RNDN);
        mpfr_set_d(r9451, phi1, MPFR_RNDN);
        mpfr_add(r9452, r9450, r9451, MPFR_RNDN);
        ;
        mpfr_div(r9454, r9452, r9453, MPFR_RNDN);
        mpfr_cos(r9455, r9454, MPFR_RNDN);
        mpfr_log1p(r9456, r9455, MPFR_RNDN);
        mpfr_expm1(r9457, r9456, MPFR_RNDN);
        mpfr_mul(r9458, r9449, r9457, MPFR_RNDN);
        mpfr_sub(r9459, r9451, r9450, MPFR_RNDN);
        mpfr_hypot(r9460, r9458, r9459, MPFR_RNDN);
        mpfr_set_d(r9461, R, MPFR_RNDN);
        mpfr_mul(r9462, r9460, r9461, MPFR_RNDN);
        return mpfr_get_d(r9462, MPFR_RNDN);
}

