#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 r39332 = eps;
        float r39333 = a;
        float r39334 = b;
        float r39335 = r39333 + r39334;
        float r39336 = r39335 * r39332;
        float r39337 = exp(r39336);
        float r39338 = 1;
        float r39339 = r39337 - r39338;
        float r39340 = r39332 * r39339;
        float r39341 = r39333 * r39332;
        float r39342 = exp(r39341);
        float r39343 = r39342 - r39338;
        float r39344 = r39334 * r39332;
        float r39345 = exp(r39344);
        float r39346 = r39345 - r39338;
        float r39347 = r39343 * r39346;
        float r39348 = r39340 / r39347;
        return r39348;
}

double f_id(double a, double b, double eps) {
        double r39349 = eps;
        double r39350 = a;
        double r39351 = b;
        double r39352 = r39350 + r39351;
        double r39353 = r39352 * r39349;
        double r39354 = exp(r39353);
        double r39355 = 1;
        double r39356 = r39354 - r39355;
        double r39357 = r39349 * r39356;
        double r39358 = r39350 * r39349;
        double r39359 = exp(r39358);
        double r39360 = r39359 - r39355;
        double r39361 = r39351 * r39349;
        double r39362 = exp(r39361);
        double r39363 = r39362 - r39355;
        double r39364 = r39360 * r39363;
        double r39365 = r39357 / r39364;
        return r39365;
}


double f_of(float a, float b, float __attribute__((unused)) eps) {
        float r39366 = 1;
        float r39367 = b;
        float r39368 = r39366 / r39367;
        float r39369 = a;
        float r39370 = r39366 / r39369;
        float r39371 = r39368 + r39370;
        return r39371;
}

double f_od(double a, double b, double __attribute__((unused)) eps) {
        double r39372 = 1;
        double r39373 = b;
        double r39374 = r39372 / r39373;
        double r39375 = a;
        double r39376 = r39372 / r39375;
        double r39377 = r39374 + r39376;
        return r39377;
}

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 r39378, r39379, r39380, r39381, r39382, r39383, r39384, r39385, r39386, r39387, r39388, r39389, r39390, r39391, r39392, r39393, r39394;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r39378);
        mpfr_init(r39379);
        mpfr_init(r39380);
        mpfr_init(r39381);
        mpfr_init(r39382);
        mpfr_init(r39383);
        mpfr_init_set_str(r39384, "1", 10, MPFR_RNDN);
        mpfr_init(r39385);
        mpfr_init(r39386);
        mpfr_init(r39387);
        mpfr_init(r39388);
        mpfr_init(r39389);
        mpfr_init(r39390);
        mpfr_init(r39391);
        mpfr_init(r39392);
        mpfr_init(r39393);
        mpfr_init(r39394);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r39378, eps, MPFR_RNDN);
        mpfr_set_d(r39379, a, MPFR_RNDN);
        mpfr_set_d(r39380, b, MPFR_RNDN);
        mpfr_add(r39381, r39379, r39380, MPFR_RNDN);
        mpfr_mul(r39382, r39381, r39378, MPFR_RNDN);
        mpfr_exp(r39383, r39382, MPFR_RNDN);
        ;
        mpfr_sub(r39385, r39383, r39384, MPFR_RNDN);
        mpfr_mul(r39386, r39378, r39385, MPFR_RNDN);
        mpfr_mul(r39387, r39379, r39378, MPFR_RNDN);
        mpfr_exp(r39388, r39387, MPFR_RNDN);
        mpfr_sub(r39389, r39388, r39384, MPFR_RNDN);
        mpfr_mul(r39390, r39380, r39378, MPFR_RNDN);
        mpfr_exp(r39391, r39390, MPFR_RNDN);
        mpfr_sub(r39392, r39391, r39384, MPFR_RNDN);
        mpfr_mul(r39393, r39389, r39392, MPFR_RNDN);
        mpfr_div(r39394, r39386, r39393, MPFR_RNDN);
        return mpfr_get_d(r39394, MPFR_RNDN);
}

static mpfr_t r39395, r39396, r39397, r39398, r39399, r39400;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39395, "1", 10, MPFR_RNDN);
        mpfr_init(r39396);
        mpfr_init(r39397);
        mpfr_init(r39398);
        mpfr_init(r39399);
        mpfr_init(r39400);
}

double f_fm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r39396, b, MPFR_RNDN);
        mpfr_div(r39397, r39395, r39396, MPFR_RNDN);
        mpfr_set_d(r39398, a, MPFR_RNDN);
        mpfr_div(r39399, r39395, r39398, MPFR_RNDN);
        mpfr_add(r39400, r39397, r39399, MPFR_RNDN);
        return mpfr_get_d(r39400, MPFR_RNDN);
}

static mpfr_t r39401, r39402, r39403, r39404, r39405, r39406;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39401, "1", 10, MPFR_RNDN);
        mpfr_init(r39402);
        mpfr_init(r39403);
        mpfr_init(r39404);
        mpfr_init(r39405);
        mpfr_init(r39406);
}

double f_dm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r39402, b, MPFR_RNDN);
        mpfr_div(r39403, r39401, r39402, MPFR_RNDN);
        mpfr_set_d(r39404, a, MPFR_RNDN);
        mpfr_div(r39405, r39401, r39404, MPFR_RNDN);
        mpfr_add(r39406, r39403, r39405, MPFR_RNDN);
        return mpfr_get_d(r39406, MPFR_RNDN);
}

