#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 r35024 = eps;
        float r35025 = a;
        float r35026 = b;
        float r35027 = r35025 + r35026;
        float r35028 = r35027 * r35024;
        float r35029 = exp(r35028);
        float r35030 = 1.0f;
        float r35031 = r35029 - r35030;
        float r35032 = r35024 * r35031;
        float r35033 = r35025 * r35024;
        float r35034 = exp(r35033);
        float r35035 = r35034 - r35030;
        float r35036 = r35026 * r35024;
        float r35037 = exp(r35036);
        float r35038 = r35037 - r35030;
        float r35039 = r35035 * r35038;
        float r35040 = r35032 / r35039;
        return r35040;
}

double f_id(double a, double b, double eps) {
        double r35041 = eps;
        double r35042 = a;
        double r35043 = b;
        double r35044 = r35042 + r35043;
        double r35045 = r35044 * r35041;
        double r35046 = exp(r35045);
        double r35047 = 1.0;
        double r35048 = r35046 - r35047;
        double r35049 = r35041 * r35048;
        double r35050 = r35042 * r35041;
        double r35051 = exp(r35050);
        double r35052 = r35051 - r35047;
        double r35053 = r35043 * r35041;
        double r35054 = exp(r35053);
        double r35055 = r35054 - r35047;
        double r35056 = r35052 * r35055;
        double r35057 = r35049 / r35056;
        return r35057;
}


double f_of(float a, float b, float __attribute__((unused)) eps) {
        float r35058 = 1.0f;
        float r35059 = a;
        float r35060 = r35058 / r35059;
        float r35061 = b;
        float r35062 = r35058 / r35061;
        float r35063 = r35060 + r35062;
        return r35063;
}

double f_od(double a, double b, double __attribute__((unused)) eps) {
        double r35064 = 1.0;
        double r35065 = a;
        double r35066 = r35064 / r35065;
        double r35067 = b;
        double r35068 = r35064 / r35067;
        double r35069 = r35066 + r35068;
        return r35069;
}

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 r35070, r35071, r35072, r35073, r35074, r35075, r35076, r35077, r35078, r35079, r35080, r35081, r35082, r35083, r35084, r35085, r35086;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r35070);
        mpfr_init(r35071);
        mpfr_init(r35072);
        mpfr_init(r35073);
        mpfr_init(r35074);
        mpfr_init(r35075);
        mpfr_init_set_str(r35076, "1", 10, MPFR_RNDN);
        mpfr_init(r35077);
        mpfr_init(r35078);
        mpfr_init(r35079);
        mpfr_init(r35080);
        mpfr_init(r35081);
        mpfr_init(r35082);
        mpfr_init(r35083);
        mpfr_init(r35084);
        mpfr_init(r35085);
        mpfr_init(r35086);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r35070, eps, MPFR_RNDN);
        mpfr_set_d(r35071, a, MPFR_RNDN);
        mpfr_set_d(r35072, b, MPFR_RNDN);
        mpfr_add(r35073, r35071, r35072, MPFR_RNDN);
        mpfr_mul(r35074, r35073, r35070, MPFR_RNDN);
        mpfr_exp(r35075, r35074, MPFR_RNDN);
        ;
        mpfr_sub(r35077, r35075, r35076, MPFR_RNDN);
        mpfr_mul(r35078, r35070, r35077, MPFR_RNDN);
        mpfr_mul(r35079, r35071, r35070, MPFR_RNDN);
        mpfr_exp(r35080, r35079, MPFR_RNDN);
        mpfr_sub(r35081, r35080, r35076, MPFR_RNDN);
        mpfr_mul(r35082, r35072, r35070, MPFR_RNDN);
        mpfr_exp(r35083, r35082, MPFR_RNDN);
        mpfr_sub(r35084, r35083, r35076, MPFR_RNDN);
        mpfr_mul(r35085, r35081, r35084, MPFR_RNDN);
        mpfr_div(r35086, r35078, r35085, MPFR_RNDN);
        return mpfr_get_d(r35086, MPFR_RNDN);
}

static mpfr_t r35087, r35088, r35089, r35090, r35091, r35092;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r35087, "1", 10, MPFR_RNDN);
        mpfr_init(r35088);
        mpfr_init(r35089);
        mpfr_init(r35090);
        mpfr_init(r35091);
        mpfr_init(r35092);
}

double f_fm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r35088, a, MPFR_RNDN);
        mpfr_div(r35089, r35087, r35088, MPFR_RNDN);
        mpfr_set_d(r35090, b, MPFR_RNDN);
        mpfr_div(r35091, r35087, r35090, MPFR_RNDN);
        mpfr_add(r35092, r35089, r35091, MPFR_RNDN);
        return mpfr_get_d(r35092, MPFR_RNDN);
}

static mpfr_t r35093, r35094, r35095, r35096, r35097, r35098;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r35093, "1", 10, MPFR_RNDN);
        mpfr_init(r35094);
        mpfr_init(r35095);
        mpfr_init(r35096);
        mpfr_init(r35097);
        mpfr_init(r35098);
}

double f_dm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r35094, a, MPFR_RNDN);
        mpfr_div(r35095, r35093, r35094, MPFR_RNDN);
        mpfr_set_d(r35096, b, MPFR_RNDN);
        mpfr_div(r35097, r35093, r35096, MPFR_RNDN);
        mpfr_add(r35098, r35095, r35097, MPFR_RNDN);
        return mpfr_get_d(r35098, MPFR_RNDN);
}

