#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 r22037 = a;
        float r22038 = r22037 * r22037;
        float r22039 = b;
        float r22040 = r22039 * r22039;
        float r22041 = r22038 - r22040;
        float r22042 = r22041 / r22038;
        float r22043 = fabs(r22042);
        float r22044 = sqrt(r22043);
        return r22044;
}

double f_id(double a, double b) {
        double r22045 = a;
        double r22046 = r22045 * r22045;
        double r22047 = b;
        double r22048 = r22047 * r22047;
        double r22049 = r22046 - r22048;
        double r22050 = r22049 / r22046;
        double r22051 = fabs(r22050);
        double r22052 = sqrt(r22051);
        return r22052;
}


double f_of(float a, float b) {
        float r22053 = 1;
        float r22054 = b;
        float r22055 = a;
        float r22056 = r22054 / r22055;
        float r22057 = r22056 * r22056;
        float r22058 = exp(r22057);
        float r22059 = log(r22058);
        float r22060 = r22053 - r22059;
        float r22061 = fabs(r22060);
        float r22062 = sqrt(r22061);
        return r22062;
}

double f_od(double a, double b) {
        double r22063 = 1;
        double r22064 = b;
        double r22065 = a;
        double r22066 = r22064 / r22065;
        double r22067 = r22066 * r22066;
        double r22068 = exp(r22067);
        double r22069 = log(r22068);
        double r22070 = r22063 - r22069;
        double r22071 = fabs(r22070);
        double r22072 = sqrt(r22071);
        return r22072;
}

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 r22073, r22074, r22075, r22076, r22077, r22078, r22079, r22080;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r22073);
        mpfr_init(r22074);
        mpfr_init(r22075);
        mpfr_init(r22076);
        mpfr_init(r22077);
        mpfr_init(r22078);
        mpfr_init(r22079);
        mpfr_init(r22080);
}

double f_im(double a, double b) {
        mpfr_set_d(r22073, a, MPFR_RNDN);
        mpfr_mul(r22074, r22073, r22073, MPFR_RNDN);
        mpfr_set_d(r22075, b, MPFR_RNDN);
        mpfr_mul(r22076, r22075, r22075, MPFR_RNDN);
        mpfr_sub(r22077, r22074, r22076, MPFR_RNDN);
        mpfr_div(r22078, r22077, r22074, MPFR_RNDN);
        mpfr_abs(r22079, r22078, MPFR_RNDN);
        mpfr_sqrt(r22080, r22079, MPFR_RNDN);
        return mpfr_get_d(r22080, MPFR_RNDN);
}

static mpfr_t r22081, r22082, r22083, r22084, r22085, r22086, r22087, r22088, r22089, r22090;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r22081, "1", 10, MPFR_RNDN);
        mpfr_init(r22082);
        mpfr_init(r22083);
        mpfr_init(r22084);
        mpfr_init(r22085);
        mpfr_init(r22086);
        mpfr_init(r22087);
        mpfr_init(r22088);
        mpfr_init(r22089);
        mpfr_init(r22090);
}

double f_fm(double a, double b) {
        ;
        mpfr_set_d(r22082, b, MPFR_RNDN);
        mpfr_set_d(r22083, a, MPFR_RNDN);
        mpfr_div(r22084, r22082, r22083, MPFR_RNDN);
        mpfr_mul(r22085, r22084, r22084, MPFR_RNDN);
        mpfr_exp(r22086, r22085, MPFR_RNDN);
        mpfr_log(r22087, r22086, MPFR_RNDN);
        mpfr_sub(r22088, r22081, r22087, MPFR_RNDN);
        mpfr_abs(r22089, r22088, MPFR_RNDN);
        mpfr_sqrt(r22090, r22089, MPFR_RNDN);
        return mpfr_get_d(r22090, MPFR_RNDN);
}

static mpfr_t r22091, r22092, r22093, r22094, r22095, r22096, r22097, r22098, r22099, r22100;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r22091, "1", 10, MPFR_RNDN);
        mpfr_init(r22092);
        mpfr_init(r22093);
        mpfr_init(r22094);
        mpfr_init(r22095);
        mpfr_init(r22096);
        mpfr_init(r22097);
        mpfr_init(r22098);
        mpfr_init(r22099);
        mpfr_init(r22100);
}

double f_dm(double a, double b) {
        ;
        mpfr_set_d(r22092, b, MPFR_RNDN);
        mpfr_set_d(r22093, a, MPFR_RNDN);
        mpfr_div(r22094, r22092, r22093, MPFR_RNDN);
        mpfr_mul(r22095, r22094, r22094, MPFR_RNDN);
        mpfr_exp(r22096, r22095, MPFR_RNDN);
        mpfr_log(r22097, r22096, MPFR_RNDN);
        mpfr_sub(r22098, r22091, r22097, MPFR_RNDN);
        mpfr_abs(r22099, r22098, MPFR_RNDN);
        mpfr_sqrt(r22100, r22099, MPFR_RNDN);
        return mpfr_get_d(r22100, MPFR_RNDN);
}

