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

char *name = "expq3 (problem 3.4.2)";

double f_if(float a, float b, float eps) {
        float r6238427 = eps;
        float r6238428 = a;
        float r6238429 = b;
        float r6238430 = r6238428 + r6238429;
        float r6238431 = r6238430 * r6238427;
        float r6238432 = exp(r6238431);
        float r6238433 = 1;
        float r6238434 = r6238432 - r6238433;
        float r6238435 = r6238427 * r6238434;
        float r6238436 = r6238428 * r6238427;
        float r6238437 = exp(r6238436);
        float r6238438 = r6238437 - r6238433;
        float r6238439 = r6238429 * r6238427;
        float r6238440 = exp(r6238439);
        float r6238441 = r6238440 - r6238433;
        float r6238442 = r6238438 * r6238441;
        float r6238443 = r6238435 / r6238442;
        return r6238443;
}

double f_id(double a, double b, double eps) {
        double r6238444 = eps;
        double r6238445 = a;
        double r6238446 = b;
        double r6238447 = r6238445 + r6238446;
        double r6238448 = r6238447 * r6238444;
        double r6238449 = exp(r6238448);
        double r6238450 = 1;
        double r6238451 = r6238449 - r6238450;
        double r6238452 = r6238444 * r6238451;
        double r6238453 = r6238445 * r6238444;
        double r6238454 = exp(r6238453);
        double r6238455 = r6238454 - r6238450;
        double r6238456 = r6238446 * r6238444;
        double r6238457 = exp(r6238456);
        double r6238458 = r6238457 - r6238450;
        double r6238459 = r6238455 * r6238458;
        double r6238460 = r6238452 / r6238459;
        return r6238460;
}


double f_of(float a, float b, float __attribute__((unused)) eps) {
        float r6238461 = 1;
        float r6238462 = b;
        float r6238463 = r6238461 / r6238462;
        float r6238464 = a;
        float r6238465 = r6238461 / r6238464;
        float r6238466 = r6238463 + r6238465;
        return r6238466;
}

double f_od(double a, double b, double __attribute__((unused)) eps) {
        double r6238467 = 1;
        double r6238468 = b;
        double r6238469 = r6238467 / r6238468;
        double r6238470 = a;
        double r6238471 = r6238467 / r6238470;
        double r6238472 = r6238469 + r6238471;
        return r6238472;
}

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 r6238473, r6238474, r6238475, r6238476, r6238477, r6238478, r6238479, r6238480, r6238481, r6238482, r6238483, r6238484, r6238485, r6238486, r6238487, r6238488, r6238489;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r6238473);
        mpfr_init(r6238474);
        mpfr_init(r6238475);
        mpfr_init(r6238476);
        mpfr_init(r6238477);
        mpfr_init(r6238478);
        mpfr_init_set_str(r6238479, "1", 10, MPFR_RNDN);
        mpfr_init(r6238480);
        mpfr_init(r6238481);
        mpfr_init(r6238482);
        mpfr_init(r6238483);
        mpfr_init(r6238484);
        mpfr_init(r6238485);
        mpfr_init(r6238486);
        mpfr_init(r6238487);
        mpfr_init(r6238488);
        mpfr_init(r6238489);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r6238473, eps, MPFR_RNDN);
        mpfr_set_d(r6238474, a, MPFR_RNDN);
        mpfr_set_d(r6238475, b, MPFR_RNDN);
        mpfr_add(r6238476, r6238474, r6238475, MPFR_RNDN);
        mpfr_mul(r6238477, r6238476, r6238473, MPFR_RNDN);
        mpfr_exp(r6238478, r6238477, MPFR_RNDN);
        ;
        mpfr_sub(r6238480, r6238478, r6238479, MPFR_RNDN);
        mpfr_mul(r6238481, r6238473, r6238480, MPFR_RNDN);
        mpfr_mul(r6238482, r6238474, r6238473, MPFR_RNDN);
        mpfr_exp(r6238483, r6238482, MPFR_RNDN);
        mpfr_sub(r6238484, r6238483, r6238479, MPFR_RNDN);
        mpfr_mul(r6238485, r6238475, r6238473, MPFR_RNDN);
        mpfr_exp(r6238486, r6238485, MPFR_RNDN);
        mpfr_sub(r6238487, r6238486, r6238479, MPFR_RNDN);
        mpfr_mul(r6238488, r6238484, r6238487, MPFR_RNDN);
        mpfr_div(r6238489, r6238481, r6238488, MPFR_RNDN);
        return mpfr_get_d(r6238489, MPFR_RNDN);
}

static mpfr_t r6238490, r6238491, r6238492, r6238493, r6238494, r6238495;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r6238490, "1", 10, MPFR_RNDN);
        mpfr_init(r6238491);
        mpfr_init(r6238492);
        mpfr_init(r6238493);
        mpfr_init(r6238494);
        mpfr_init(r6238495);
}

double f_fm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r6238491, b, MPFR_RNDN);
        mpfr_div(r6238492, r6238490, r6238491, MPFR_RNDN);
        mpfr_set_d(r6238493, a, MPFR_RNDN);
        mpfr_div(r6238494, r6238490, r6238493, MPFR_RNDN);
        mpfr_add(r6238495, r6238492, r6238494, MPFR_RNDN);
        return mpfr_get_d(r6238495, MPFR_RNDN);
}

static mpfr_t r6238496, r6238497, r6238498, r6238499, r6238500, r6238501;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r6238496, "1", 10, MPFR_RNDN);
        mpfr_init(r6238497);
        mpfr_init(r6238498);
        mpfr_init(r6238499);
        mpfr_init(r6238500);
        mpfr_init(r6238501);
}

double f_dm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r6238497, b, MPFR_RNDN);
        mpfr_div(r6238498, r6238496, r6238497, MPFR_RNDN);
        mpfr_set_d(r6238499, a, MPFR_RNDN);
        mpfr_div(r6238500, r6238496, r6238499, MPFR_RNDN);
        mpfr_add(r6238501, r6238498, r6238500, MPFR_RNDN);
        return mpfr_get_d(r6238501, MPFR_RNDN);
}

