#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 r11871809 = eps;
        float r11871810 = a;
        float r11871811 = b;
        float r11871812 = r11871810 + r11871811;
        float r11871813 = r11871812 * r11871809;
        float r11871814 = exp(r11871813);
        float r11871815 = 1;
        float r11871816 = r11871814 - r11871815;
        float r11871817 = r11871809 * r11871816;
        float r11871818 = r11871810 * r11871809;
        float r11871819 = exp(r11871818);
        float r11871820 = r11871819 - r11871815;
        float r11871821 = r11871811 * r11871809;
        float r11871822 = exp(r11871821);
        float r11871823 = r11871822 - r11871815;
        float r11871824 = r11871820 * r11871823;
        float r11871825 = r11871817 / r11871824;
        return r11871825;
}

double f_id(double a, double b, double eps) {
        double r11871826 = eps;
        double r11871827 = a;
        double r11871828 = b;
        double r11871829 = r11871827 + r11871828;
        double r11871830 = r11871829 * r11871826;
        double r11871831 = exp(r11871830);
        double r11871832 = 1;
        double r11871833 = r11871831 - r11871832;
        double r11871834 = r11871826 * r11871833;
        double r11871835 = r11871827 * r11871826;
        double r11871836 = exp(r11871835);
        double r11871837 = r11871836 - r11871832;
        double r11871838 = r11871828 * r11871826;
        double r11871839 = exp(r11871838);
        double r11871840 = r11871839 - r11871832;
        double r11871841 = r11871837 * r11871840;
        double r11871842 = r11871834 / r11871841;
        return r11871842;
}


double f_of(float a, float b, float __attribute__((unused)) eps) {
        float r11871843 = 1;
        float r11871844 = b;
        float r11871845 = r11871843 / r11871844;
        float r11871846 = a;
        float r11871847 = r11871843 / r11871846;
        float r11871848 = r11871845 + r11871847;
        return r11871848;
}

double f_od(double a, double b, double __attribute__((unused)) eps) {
        double r11871849 = 1;
        double r11871850 = b;
        double r11871851 = r11871849 / r11871850;
        double r11871852 = a;
        double r11871853 = r11871849 / r11871852;
        double r11871854 = r11871851 + r11871853;
        return r11871854;
}

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 r11871855, r11871856, r11871857, r11871858, r11871859, r11871860, r11871861, r11871862, r11871863, r11871864, r11871865, r11871866, r11871867, r11871868, r11871869, r11871870, r11871871;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r11871855);
        mpfr_init(r11871856);
        mpfr_init(r11871857);
        mpfr_init(r11871858);
        mpfr_init(r11871859);
        mpfr_init(r11871860);
        mpfr_init_set_str(r11871861, "1", 10, MPFR_RNDN);
        mpfr_init(r11871862);
        mpfr_init(r11871863);
        mpfr_init(r11871864);
        mpfr_init(r11871865);
        mpfr_init(r11871866);
        mpfr_init(r11871867);
        mpfr_init(r11871868);
        mpfr_init(r11871869);
        mpfr_init(r11871870);
        mpfr_init(r11871871);
}

double f_im(double a, double b, double eps) {
        mpfr_set_d(r11871855, eps, MPFR_RNDN);
        mpfr_set_d(r11871856, a, MPFR_RNDN);
        mpfr_set_d(r11871857, b, MPFR_RNDN);
        mpfr_add(r11871858, r11871856, r11871857, MPFR_RNDN);
        mpfr_mul(r11871859, r11871858, r11871855, MPFR_RNDN);
        mpfr_exp(r11871860, r11871859, MPFR_RNDN);
        ;
        mpfr_sub(r11871862, r11871860, r11871861, MPFR_RNDN);
        mpfr_mul(r11871863, r11871855, r11871862, MPFR_RNDN);
        mpfr_mul(r11871864, r11871856, r11871855, MPFR_RNDN);
        mpfr_exp(r11871865, r11871864, MPFR_RNDN);
        mpfr_sub(r11871866, r11871865, r11871861, MPFR_RNDN);
        mpfr_mul(r11871867, r11871857, r11871855, MPFR_RNDN);
        mpfr_exp(r11871868, r11871867, MPFR_RNDN);
        mpfr_sub(r11871869, r11871868, r11871861, MPFR_RNDN);
        mpfr_mul(r11871870, r11871866, r11871869, MPFR_RNDN);
        mpfr_div(r11871871, r11871863, r11871870, MPFR_RNDN);
        return mpfr_get_d(r11871871, MPFR_RNDN);
}

static mpfr_t r11871872, r11871873, r11871874, r11871875, r11871876, r11871877;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r11871872, "1", 10, MPFR_RNDN);
        mpfr_init(r11871873);
        mpfr_init(r11871874);
        mpfr_init(r11871875);
        mpfr_init(r11871876);
        mpfr_init(r11871877);
}

double f_fm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r11871873, b, MPFR_RNDN);
        mpfr_div(r11871874, r11871872, r11871873, MPFR_RNDN);
        mpfr_set_d(r11871875, a, MPFR_RNDN);
        mpfr_div(r11871876, r11871872, r11871875, MPFR_RNDN);
        mpfr_add(r11871877, r11871874, r11871876, MPFR_RNDN);
        return mpfr_get_d(r11871877, MPFR_RNDN);
}

static mpfr_t r11871878, r11871879, r11871880, r11871881, r11871882, r11871883;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r11871878, "1", 10, MPFR_RNDN);
        mpfr_init(r11871879);
        mpfr_init(r11871880);
        mpfr_init(r11871881);
        mpfr_init(r11871882);
        mpfr_init(r11871883);
}

double f_dm(double a, double b, double __attribute__((unused)) eps) {
        ;
        mpfr_set_d(r11871879, b, MPFR_RNDN);
        mpfr_div(r11871880, r11871878, r11871879, MPFR_RNDN);
        mpfr_set_d(r11871881, a, MPFR_RNDN);
        mpfr_div(r11871882, r11871878, r11871881, MPFR_RNDN);
        mpfr_add(r11871883, r11871880, r11871882, MPFR_RNDN);
        return mpfr_get_d(r11871883, MPFR_RNDN);
}

