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

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

double f_if(float x, float y) {
        float r45919 = x;
        float r45920 = y;
        float r45921 = r45919 * r45920;
        float r45922 = r45921 + r45919;
        float r45923 = r45922 + r45920;
        return r45923;
}

double f_id(double x, double y) {
        double r45924 = x;
        double r45925 = y;
        double r45926 = r45924 * r45925;
        double r45927 = r45926 + r45924;
        double r45928 = r45927 + r45925;
        return r45928;
}


double f_of(float x, float y) {
        float r45929 = x;
        float r45930 = y;
        float r45931 = r45929 * r45930;
        float r45932 = r45931 + r45929;
        float r45933 = r45932 + r45930;
        return r45933;
}

double f_od(double x, double y) {
        double r45934 = x;
        double r45935 = y;
        double r45936 = r45934 * r45935;
        double r45937 = r45936 + r45934;
        double r45938 = r45937 + r45935;
        return r45938;
}

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 r45939, r45940, r45941, r45942, r45943;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45939);
        mpfr_init(r45940);
        mpfr_init(r45941);
        mpfr_init(r45942);
        mpfr_init(r45943);
}

double f_im(double x, double y) {
        mpfr_set_d(r45939, x, MPFR_RNDN);
        mpfr_set_d(r45940, y, MPFR_RNDN);
        mpfr_mul(r45941, r45939, r45940, MPFR_RNDN);
        mpfr_add(r45942, r45941, r45939, MPFR_RNDN);
        mpfr_add(r45943, r45942, r45940, MPFR_RNDN);
        return mpfr_get_d(r45943, MPFR_RNDN);
}

static mpfr_t r45944, r45945, r45946, r45947, r45948;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45944);
        mpfr_init(r45945);
        mpfr_init(r45946);
        mpfr_init(r45947);
        mpfr_init(r45948);
}

double f_fm(double x, double y) {
        mpfr_set_d(r45944, x, MPFR_RNDN);
        mpfr_set_d(r45945, y, MPFR_RNDN);
        mpfr_mul(r45946, r45944, r45945, MPFR_RNDN);
        mpfr_add(r45947, r45946, r45944, MPFR_RNDN);
        mpfr_add(r45948, r45947, r45945, MPFR_RNDN);
        return mpfr_get_d(r45948, MPFR_RNDN);
}

static mpfr_t r45949, r45950, r45951, r45952, r45953;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45949);
        mpfr_init(r45950);
        mpfr_init(r45951);
        mpfr_init(r45952);
        mpfr_init(r45953);
}

double f_dm(double x, double y) {
        mpfr_set_d(r45949, x, MPFR_RNDN);
        mpfr_set_d(r45950, y, MPFR_RNDN);
        mpfr_mul(r45951, r45949, r45950, MPFR_RNDN);
        mpfr_add(r45952, r45951, r45949, MPFR_RNDN);
        mpfr_add(r45953, r45952, r45950, MPFR_RNDN);
        return mpfr_get_d(r45953, MPFR_RNDN);
}

