#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 r39300 = eps;
        float r39301 = a;
        float r39302 = b;
        float r39303 = r39301 + r39302;
        float r39304 = r39303 * r39300;
        float r39305 = exp(r39304);
        float r39306 = 1;
        float r39307 = r39305 - r39306;
        float r39308 = r39300 * r39307;
        float r39309 = r39301 * r39300;
        float r39310 = exp(r39309);
        float r39311 = r39310 - r39306;
        float r39312 = r39302 * r39300;
        float r39313 = exp(r39312);
        float r39314 = r39313 - r39306;
        float r39315 = r39311 * r39314;
        float r39316 = r39308 / r39315;
        return r39316;
}

double f_id(double a, double b, double eps) {
        double r39317 = eps;
        double r39318 = a;
        double r39319 = b;
        double r39320 = r39318 + r39319;
        double r39321 = r39320 * r39317;
        double r39322 = exp(r39321);
        double r39323 = 1;
        double r39324 = r39322 - r39323;
        double r39325 = r39317 * r39324;
        double r39326 = r39318 * r39317;
        double r39327 = exp(r39326);
        double r39328 = r39327 - r39323;
        double r39329 = r39319 * r39317;
        double r39330 = exp(r39329);
        double r39331 = r39330 - r39323;
        double r39332 = r39328 * r39331;
        double r39333 = r39325 / r39332;
        return r39333;
}


double f_of(float a, float b, float __attribute__((unused)) eps) {
        float r39334 = 1;
        float r39335 = b;
        float r39336 = r39334 / r39335;
        float r39337 = a;
        float r39338 = r39334 / r39337;
        float r39339 = r39336 + r39338;
        return r39339;
}

double f_od(double a, double b, double __attribute__((unused)) eps) {
        double r39340 = 1;
        double r39341 = b;
        double r39342 = r39340 / r39341;
        double r39343 = a;
        double r39344 = r39340 / r39343;
        double r39345 = r39342 + r39344;
        return r39345;
}

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 r39346, r39347, r39348, r39349, r39350, r39351, r39352, r39353, r39354, r39355, r39356, r39357, r39358, r39359, r39360, r39361, r39362;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r39346);
        mpfr_init(r39347);
        mpfr_init(r39348);
        mpfr_init(r39349);
        mpfr_init(r39350);
        mpfr_init(r39351);
        mpfr_init_set_str(r39352, "1", 10, MPFR_RNDN);
        mpfr_init(r39353);
        mpfr_init(r39354);
        mpfr_init(r39355);
        mpfr_init(r39356);
        mpfr_init(r39357);
        mpfr_init(r39358);
        mpfr_init(r39359);
        mpfr_init(r39360);
        mpfr_init(r39361);
        mpfr_init(r39362);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r39346, eps, MPFR_RNDN);
        mpfr_set_d(r39347, a, MPFR_RNDN);
        mpfr_set_d(r39348, b, MPFR_RNDN);
        mpfr_add(r39349, r39347, r39348, MPFR_RNDN);
        mpfr_mul(r39350, r39349, r39346, MPFR_RNDN);
        mpfr_exp(r39351, r39350, MPFR_RNDN);
        ;
        mpfr_sub(r39353, r39351, r39352, MPFR_RNDN);
        mpfr_mul(r39354, r39346, r39353, MPFR_RNDN);
        mpfr_mul(r39355, r39347, r39346, MPFR_RNDN);
        mpfr_exp(r39356, r39355, MPFR_RNDN);
        mpfr_sub(r39357, r39356, r39352, MPFR_RNDN);
        mpfr_mul(r39358, r39348, r39346, MPFR_RNDN);
        mpfr_exp(r39359, r39358, MPFR_RNDN);
        mpfr_sub(r39360, r39359, r39352, MPFR_RNDN);
        mpfr_mul(r39361, r39357, r39360, MPFR_RNDN);
        mpfr_div(r39362, r39354, r39361, MPFR_RNDN);
        return mpfr_get_d(r39362, MPFR_RNDN);
}

static mpfr_t r39363, r39364, r39365, r39366, r39367, r39368;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39363, "1", 10, MPFR_RNDN);
        mpfr_init(r39364);
        mpfr_init(r39365);
        mpfr_init(r39366);
        mpfr_init(r39367);
        mpfr_init(r39368);
}

double f_fm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r39364, b, MPFR_RNDN);
        mpfr_div(r39365, r39363, r39364, MPFR_RNDN);
        mpfr_set_d(r39366, a, MPFR_RNDN);
        mpfr_div(r39367, r39363, r39366, MPFR_RNDN);
        mpfr_add(r39368, r39365, r39367, MPFR_RNDN);
        return mpfr_get_d(r39368, MPFR_RNDN);
}

static mpfr_t r39369, r39370, r39371, r39372, r39373, r39374;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39369, "1", 10, MPFR_RNDN);
        mpfr_init(r39370);
        mpfr_init(r39371);
        mpfr_init(r39372);
        mpfr_init(r39373);
        mpfr_init(r39374);
}

double f_dm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r39370, b, MPFR_RNDN);
        mpfr_div(r39371, r39369, r39370, MPFR_RNDN);
        mpfr_set_d(r39372, a, MPFR_RNDN);
        mpfr_div(r39373, r39369, r39372, MPFR_RNDN);
        mpfr_add(r39374, r39371, r39373, MPFR_RNDN);
        return mpfr_get_d(r39374, MPFR_RNDN);
}

