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

char *name = "Eccentricity of an ellipse";

double f_if(float a, float b) {
        float r18361526 = a;
        float r18361527 = r18361526 * r18361526;
        float r18361528 = b;
        float r18361529 = r18361528 * r18361528;
        float r18361530 = r18361527 - r18361529;
        float r18361531 = r18361530 / r18361527;
        float r18361532 = fabs(r18361531);
        float r18361533 = sqrt(r18361532);
        return r18361533;
}

double f_id(double a, double b) {
        double r18361534 = a;
        double r18361535 = r18361534 * r18361534;
        double r18361536 = b;
        double r18361537 = r18361536 * r18361536;
        double r18361538 = r18361535 - r18361537;
        double r18361539 = r18361538 / r18361535;
        double r18361540 = fabs(r18361539);
        double r18361541 = sqrt(r18361540);
        return r18361541;
}


double f_of(float a, float b) {
        float r18361542 = 1;
        float r18361543 = b;
        float r18361544 = a;
        float r18361545 = r18361543 / r18361544;
        float r18361546 = r18361545 * r18361545;
        float r18361547 = r18361542 - r18361546;
        float r18361548 = fabs(r18361547);
        float r18361549 = sqrt(r18361548);
        return r18361549;
}

double f_od(double a, double b) {
        double r18361550 = 1;
        double r18361551 = b;
        double r18361552 = a;
        double r18361553 = r18361551 / r18361552;
        double r18361554 = r18361553 * r18361553;
        double r18361555 = r18361550 - r18361554;
        double r18361556 = fabs(r18361555);
        double r18361557 = sqrt(r18361556);
        return r18361557;
}

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 r18361558, r18361559, r18361560, r18361561, r18361562, r18361563, r18361564, r18361565;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r18361558);
        mpfr_init(r18361559);
        mpfr_init(r18361560);
        mpfr_init(r18361561);
        mpfr_init(r18361562);
        mpfr_init(r18361563);
        mpfr_init(r18361564);
        mpfr_init(r18361565);
}

double f_im(double a, double b) {
        mpfr_set_d(r18361558, a, MPFR_RNDN);
        mpfr_mul(r18361559, r18361558, r18361558, MPFR_RNDN);
        mpfr_set_d(r18361560, b, MPFR_RNDN);
        mpfr_mul(r18361561, r18361560, r18361560, MPFR_RNDN);
        mpfr_sub(r18361562, r18361559, r18361561, MPFR_RNDN);
        mpfr_div(r18361563, r18361562, r18361559, MPFR_RNDN);
        mpfr_abs(r18361564, r18361563, MPFR_RNDN);
        mpfr_sqrt(r18361565, r18361564, MPFR_RNDN);
        return mpfr_get_d(r18361565, MPFR_RNDN);
}

static mpfr_t r18361566, r18361567, r18361568, r18361569, r18361570, r18361571, r18361572, r18361573;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r18361566, "1", 10, MPFR_RNDN);
        mpfr_init(r18361567);
        mpfr_init(r18361568);
        mpfr_init(r18361569);
        mpfr_init(r18361570);
        mpfr_init(r18361571);
        mpfr_init(r18361572);
        mpfr_init(r18361573);
}

double f_fm(double a, double b) {
        ;
        mpfr_set_d(r18361567, b, MPFR_RNDN);
        mpfr_set_d(r18361568, a, MPFR_RNDN);
        mpfr_div(r18361569, r18361567, r18361568, MPFR_RNDN);
        mpfr_mul(r18361570, r18361569, r18361569, MPFR_RNDN);
        mpfr_sub(r18361571, r18361566, r18361570, MPFR_RNDN);
        mpfr_abs(r18361572, r18361571, MPFR_RNDN);
        mpfr_sqrt(r18361573, r18361572, MPFR_RNDN);
        return mpfr_get_d(r18361573, MPFR_RNDN);
}

static mpfr_t r18361574, r18361575, r18361576, r18361577, r18361578, r18361579, r18361580, r18361581;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r18361574, "1", 10, MPFR_RNDN);
        mpfr_init(r18361575);
        mpfr_init(r18361576);
        mpfr_init(r18361577);
        mpfr_init(r18361578);
        mpfr_init(r18361579);
        mpfr_init(r18361580);
        mpfr_init(r18361581);
}

double f_dm(double a, double b) {
        ;
        mpfr_set_d(r18361575, b, MPFR_RNDN);
        mpfr_set_d(r18361576, a, MPFR_RNDN);
        mpfr_div(r18361577, r18361575, r18361576, MPFR_RNDN);
        mpfr_mul(r18361578, r18361577, r18361577, MPFR_RNDN);
        mpfr_sub(r18361579, r18361574, r18361578, MPFR_RNDN);
        mpfr_abs(r18361580, r18361579, MPFR_RNDN);
        mpfr_sqrt(r18361581, r18361580, MPFR_RNDN);
        return mpfr_get_d(r18361581, MPFR_RNDN);
}

