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

char *name = "Numeric.Integration.TanhSinh:simpson  from integration-0.2.1";

double f_if(float x, float y) {
        float r45812 = x;
        float r45813 = y;
        float r45814 = r45813 + r45813;
        float r45815 = r45812 * r45814;
        return r45815;
}

double f_id(double x, double y) {
        double r45816 = x;
        double r45817 = y;
        double r45818 = r45817 + r45817;
        double r45819 = r45816 * r45818;
        return r45819;
}


double f_of(float x, float y) {
        float r45820 = x;
        float r45821 = y;
        float r45822 = r45821 + r45821;
        float r45823 = r45820 * r45822;
        return r45823;
}

double f_od(double x, double y) {
        double r45824 = x;
        double r45825 = y;
        double r45826 = r45825 + r45825;
        double r45827 = r45824 * r45826;
        return r45827;
}

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 r45828, r45829, r45830, r45831;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45828);
        mpfr_init(r45829);
        mpfr_init(r45830);
        mpfr_init(r45831);
}

double f_im(double x, double y) {
        mpfr_set_d(r45828, x, MPFR_RNDN);
        mpfr_set_d(r45829, y, MPFR_RNDN);
        mpfr_add(r45830, r45829, r45829, MPFR_RNDN);
        mpfr_mul(r45831, r45828, r45830, MPFR_RNDN);
        return mpfr_get_d(r45831, MPFR_RNDN);
}

static mpfr_t r45832, r45833, r45834, r45835;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45832);
        mpfr_init(r45833);
        mpfr_init(r45834);
        mpfr_init(r45835);
}

double f_fm(double x, double y) {
        mpfr_set_d(r45832, x, MPFR_RNDN);
        mpfr_set_d(r45833, y, MPFR_RNDN);
        mpfr_add(r45834, r45833, r45833, MPFR_RNDN);
        mpfr_mul(r45835, r45832, r45834, MPFR_RNDN);
        return mpfr_get_d(r45835, MPFR_RNDN);
}

static mpfr_t r45836, r45837, r45838, r45839;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45836);
        mpfr_init(r45837);
        mpfr_init(r45838);
        mpfr_init(r45839);
}

double f_dm(double x, double y) {
        mpfr_set_d(r45836, x, MPFR_RNDN);
        mpfr_set_d(r45837, y, MPFR_RNDN);
        mpfr_add(r45838, r45837, r45837, MPFR_RNDN);
        mpfr_mul(r45839, r45836, r45838, MPFR_RNDN);
        return mpfr_get_d(r45839, MPFR_RNDN);
}

