#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 r25507 = a;
        float r25508 = r25507 * r25507;
        float r25509 = b;
        float r25510 = r25509 * r25509;
        float r25511 = r25508 - r25510;
        float r25512 = r25511 / r25508;
        float r25513 = fabs(r25512);
        float r25514 = sqrt(r25513);
        return r25514;
}

double f_id(double a, double b) {
        double r25515 = a;
        double r25516 = r25515 * r25515;
        double r25517 = b;
        double r25518 = r25517 * r25517;
        double r25519 = r25516 - r25518;
        double r25520 = r25519 / r25516;
        double r25521 = fabs(r25520);
        double r25522 = sqrt(r25521);
        return r25522;
}


double f_of(float a, float b) {
        float r25523 = 1;
        float r25524 = b;
        float r25525 = a;
        float r25526 = r25524 / r25525;
        float r25527 = r25526 * r25526;
        float r25528 = exp(r25527);
        float r25529 = log(r25528);
        float r25530 = r25523 - r25529;
        float r25531 = fabs(r25530);
        float r25532 = sqrt(r25531);
        return r25532;
}

double f_od(double a, double b) {
        double r25533 = 1;
        double r25534 = b;
        double r25535 = a;
        double r25536 = r25534 / r25535;
        double r25537 = r25536 * r25536;
        double r25538 = exp(r25537);
        double r25539 = log(r25538);
        double r25540 = r25533 - r25539;
        double r25541 = fabs(r25540);
        double r25542 = sqrt(r25541);
        return r25542;
}

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 r25543, r25544, r25545, r25546, r25547, r25548, r25549, r25550;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r25543);
        mpfr_init(r25544);
        mpfr_init(r25545);
        mpfr_init(r25546);
        mpfr_init(r25547);
        mpfr_init(r25548);
        mpfr_init(r25549);
        mpfr_init(r25550);
}

double f_im(double a, double b) {
        mpfr_set_d(r25543, a, MPFR_RNDN);
        mpfr_mul(r25544, r25543, r25543, MPFR_RNDN);
        mpfr_set_d(r25545, b, MPFR_RNDN);
        mpfr_mul(r25546, r25545, r25545, MPFR_RNDN);
        mpfr_sub(r25547, r25544, r25546, MPFR_RNDN);
        mpfr_div(r25548, r25547, r25544, MPFR_RNDN);
        mpfr_abs(r25549, r25548, MPFR_RNDN);
        mpfr_sqrt(r25550, r25549, MPFR_RNDN);
        return mpfr_get_d(r25550, MPFR_RNDN);
}

static mpfr_t r25551, r25552, r25553, r25554, r25555, r25556, r25557, r25558, r25559, r25560;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r25551, "1", 10, MPFR_RNDN);
        mpfr_init(r25552);
        mpfr_init(r25553);
        mpfr_init(r25554);
        mpfr_init(r25555);
        mpfr_init(r25556);
        mpfr_init(r25557);
        mpfr_init(r25558);
        mpfr_init(r25559);
        mpfr_init(r25560);
}

double f_fm(double a, double b) {
        ;
        mpfr_set_d(r25552, b, MPFR_RNDN);
        mpfr_set_d(r25553, a, MPFR_RNDN);
        mpfr_div(r25554, r25552, r25553, MPFR_RNDN);
        mpfr_mul(r25555, r25554, r25554, MPFR_RNDN);
        mpfr_exp(r25556, r25555, MPFR_RNDN);
        mpfr_log(r25557, r25556, MPFR_RNDN);
        mpfr_sub(r25558, r25551, r25557, MPFR_RNDN);
        mpfr_abs(r25559, r25558, MPFR_RNDN);
        mpfr_sqrt(r25560, r25559, MPFR_RNDN);
        return mpfr_get_d(r25560, MPFR_RNDN);
}

static mpfr_t r25561, r25562, r25563, r25564, r25565, r25566, r25567, r25568, r25569, r25570;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r25561, "1", 10, MPFR_RNDN);
        mpfr_init(r25562);
        mpfr_init(r25563);
        mpfr_init(r25564);
        mpfr_init(r25565);
        mpfr_init(r25566);
        mpfr_init(r25567);
        mpfr_init(r25568);
        mpfr_init(r25569);
        mpfr_init(r25570);
}

double f_dm(double a, double b) {
        ;
        mpfr_set_d(r25562, b, MPFR_RNDN);
        mpfr_set_d(r25563, a, MPFR_RNDN);
        mpfr_div(r25564, r25562, r25563, MPFR_RNDN);
        mpfr_mul(r25565, r25564, r25564, MPFR_RNDN);
        mpfr_exp(r25566, r25565, MPFR_RNDN);
        mpfr_log(r25567, r25566, MPFR_RNDN);
        mpfr_sub(r25568, r25561, r25567, MPFR_RNDN);
        mpfr_abs(r25569, r25568, MPFR_RNDN);
        mpfr_sqrt(r25570, r25569, MPFR_RNDN);
        return mpfr_get_d(r25570, MPFR_RNDN);
}

