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

char *name = "Numeric.Log:$clog1p from log-domain-0.10.2.1, A";

double f_if(float x, float y) {
        float r45609 = x;
        float r45610 = 2.0;
        float r45611 = r45609 * r45610;
        float r45612 = r45609 * r45609;
        float r45613 = r45611 + r45612;
        float r45614 = y;
        float r45615 = r45614 * r45614;
        float r45616 = r45613 + r45615;
        return r45616;
}

double f_id(double x, double y) {
        double r45617 = x;
        double r45618 = 2.0;
        double r45619 = r45617 * r45618;
        double r45620 = r45617 * r45617;
        double r45621 = r45619 + r45620;
        double r45622 = y;
        double r45623 = r45622 * r45622;
        double r45624 = r45621 + r45623;
        return r45624;
}


double f_of(float x, float y) {
        float r45625 = x;
        float r45626 = 2.0;
        float r45627 = r45625 * r45626;
        float r45628 = r45625 * r45625;
        float r45629 = r45627 + r45628;
        float r45630 = y;
        float r45631 = r45630 * r45630;
        float r45632 = r45629 + r45631;
        return r45632;
}

double f_od(double x, double y) {
        double r45633 = x;
        double r45634 = 2.0;
        double r45635 = r45633 * r45634;
        double r45636 = r45633 * r45633;
        double r45637 = r45635 + r45636;
        double r45638 = y;
        double r45639 = r45638 * r45638;
        double r45640 = r45637 + r45639;
        return r45640;
}

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 r45641, r45642, r45643, r45644, r45645, r45646, r45647, r45648;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45641);
        mpfr_init_set_str(r45642, "2.0", 10, MPFR_RNDN);
        mpfr_init(r45643);
        mpfr_init(r45644);
        mpfr_init(r45645);
        mpfr_init(r45646);
        mpfr_init(r45647);
        mpfr_init(r45648);
}

double f_im(double x, double y) {
        mpfr_set_d(r45641, x, MPFR_RNDN);
        ;
        mpfr_mul(r45643, r45641, r45642, MPFR_RNDN);
        mpfr_mul(r45644, r45641, r45641, MPFR_RNDN);
        mpfr_add(r45645, r45643, r45644, MPFR_RNDN);
        mpfr_set_d(r45646, y, MPFR_RNDN);
        mpfr_mul(r45647, r45646, r45646, MPFR_RNDN);
        mpfr_add(r45648, r45645, r45647, MPFR_RNDN);
        return mpfr_get_d(r45648, MPFR_RNDN);
}

static mpfr_t r45649, r45650, r45651, r45652, r45653, r45654, r45655, r45656;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45649);
        mpfr_init_set_str(r45650, "2.0", 10, MPFR_RNDN);
        mpfr_init(r45651);
        mpfr_init(r45652);
        mpfr_init(r45653);
        mpfr_init(r45654);
        mpfr_init(r45655);
        mpfr_init(r45656);
}

double f_fm(double x, double y) {
        mpfr_set_d(r45649, x, MPFR_RNDN);
        ;
        mpfr_mul(r45651, r45649, r45650, MPFR_RNDN);
        mpfr_mul(r45652, r45649, r45649, MPFR_RNDN);
        mpfr_add(r45653, r45651, r45652, MPFR_RNDN);
        mpfr_set_d(r45654, y, MPFR_RNDN);
        mpfr_mul(r45655, r45654, r45654, MPFR_RNDN);
        mpfr_add(r45656, r45653, r45655, MPFR_RNDN);
        return mpfr_get_d(r45656, MPFR_RNDN);
}

static mpfr_t r45657, r45658, r45659, r45660, r45661, r45662, r45663, r45664;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45657);
        mpfr_init_set_str(r45658, "2.0", 10, MPFR_RNDN);
        mpfr_init(r45659);
        mpfr_init(r45660);
        mpfr_init(r45661);
        mpfr_init(r45662);
        mpfr_init(r45663);
        mpfr_init(r45664);
}

double f_dm(double x, double y) {
        mpfr_set_d(r45657, x, MPFR_RNDN);
        ;
        mpfr_mul(r45659, r45657, r45658, MPFR_RNDN);
        mpfr_mul(r45660, r45657, r45657, MPFR_RNDN);
        mpfr_add(r45661, r45659, r45660, MPFR_RNDN);
        mpfr_set_d(r45662, y, MPFR_RNDN);
        mpfr_mul(r45663, r45662, r45662, MPFR_RNDN);
        mpfr_add(r45664, r45661, r45663, MPFR_RNDN);
        return mpfr_get_d(r45664, MPFR_RNDN);
}

