#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 r9012 = a;
        float r9013 = r9012 * r9012;
        float r9014 = b;
        float r9015 = r9014 * r9014;
        float r9016 = r9013 - r9015;
        float r9017 = r9016 / r9013;
        float r9018 = fabs(r9017);
        float r9019 = sqrt(r9018);
        return r9019;
}

double f_id(double a, double b) {
        double r9020 = a;
        double r9021 = r9020 * r9020;
        double r9022 = b;
        double r9023 = r9022 * r9022;
        double r9024 = r9021 - r9023;
        double r9025 = r9024 / r9021;
        double r9026 = fabs(r9025);
        double r9027 = sqrt(r9026);
        return r9027;
}


double f_of(float a, float b) {
        float r9028 = 1.0f;
        float r9029 = b;
        float r9030 = a;
        float r9031 = r9029 / r9030;
        float r9032 = r9031 * r9031;
        float r9033 = exp(r9032);
        float r9034 = log(r9033);
        float r9035 = r9028 - r9034;
        float r9036 = fabs(r9035);
        float r9037 = sqrt(r9036);
        return r9037;
}

double f_od(double a, double b) {
        double r9038 = 1.0;
        double r9039 = b;
        double r9040 = a;
        double r9041 = r9039 / r9040;
        double r9042 = r9041 * r9041;
        double r9043 = exp(r9042);
        double r9044 = log(r9043);
        double r9045 = r9038 - r9044;
        double r9046 = fabs(r9045);
        double r9047 = sqrt(r9046);
        return r9047;
}

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 r9048, r9049, r9050, r9051, r9052, r9053, r9054, r9055;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r9048);
        mpfr_init(r9049);
        mpfr_init(r9050);
        mpfr_init(r9051);
        mpfr_init(r9052);
        mpfr_init(r9053);
        mpfr_init(r9054);
        mpfr_init(r9055);
}

double f_im(double a, double b) {
        mpfr_set_d(r9048, a, MPFR_RNDN);
        mpfr_mul(r9049, r9048, r9048, MPFR_RNDN);
        mpfr_set_d(r9050, b, MPFR_RNDN);
        mpfr_mul(r9051, r9050, r9050, MPFR_RNDN);
        mpfr_sub(r9052, r9049, r9051, MPFR_RNDN);
        mpfr_div(r9053, r9052, r9049, MPFR_RNDN);
        mpfr_abs(r9054, r9053, MPFR_RNDN);
        mpfr_sqrt(r9055, r9054, MPFR_RNDN);
        return mpfr_get_d(r9055, MPFR_RNDN);
}

static mpfr_t r9056, r9057, r9058, r9059, r9060, r9061, r9062, r9063, r9064, r9065;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r9056, "1", 10, MPFR_RNDN);
        mpfr_init(r9057);
        mpfr_init(r9058);
        mpfr_init(r9059);
        mpfr_init(r9060);
        mpfr_init(r9061);
        mpfr_init(r9062);
        mpfr_init(r9063);
        mpfr_init(r9064);
        mpfr_init(r9065);
}

double f_fm(double a, double b) {
        ;
        mpfr_set_d(r9057, b, MPFR_RNDN);
        mpfr_set_d(r9058, a, MPFR_RNDN);
        mpfr_div(r9059, r9057, r9058, MPFR_RNDN);
        mpfr_mul(r9060, r9059, r9059, MPFR_RNDN);
        mpfr_exp(r9061, r9060, MPFR_RNDN);
        mpfr_log(r9062, r9061, MPFR_RNDN);
        mpfr_sub(r9063, r9056, r9062, MPFR_RNDN);
        mpfr_abs(r9064, r9063, MPFR_RNDN);
        mpfr_sqrt(r9065, r9064, MPFR_RNDN);
        return mpfr_get_d(r9065, MPFR_RNDN);
}

static mpfr_t r9066, r9067, r9068, r9069, r9070, r9071, r9072, r9073, r9074, r9075;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r9066, "1", 10, MPFR_RNDN);
        mpfr_init(r9067);
        mpfr_init(r9068);
        mpfr_init(r9069);
        mpfr_init(r9070);
        mpfr_init(r9071);
        mpfr_init(r9072);
        mpfr_init(r9073);
        mpfr_init(r9074);
        mpfr_init(r9075);
}

double f_dm(double a, double b) {
        ;
        mpfr_set_d(r9067, b, MPFR_RNDN);
        mpfr_set_d(r9068, a, MPFR_RNDN);
        mpfr_div(r9069, r9067, r9068, MPFR_RNDN);
        mpfr_mul(r9070, r9069, r9069, MPFR_RNDN);
        mpfr_exp(r9071, r9070, MPFR_RNDN);
        mpfr_log(r9072, r9071, MPFR_RNDN);
        mpfr_sub(r9073, r9066, r9072, MPFR_RNDN);
        mpfr_abs(r9074, r9073, MPFR_RNDN);
        mpfr_sqrt(r9075, r9074, MPFR_RNDN);
        return mpfr_get_d(r9075, MPFR_RNDN);
}

