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

char *name = "Numeric.SpecFunctions:log1p from math-functions-0.1.5.2, B";

double f_if(float x) {
        float r42988 = x;
        float r42989 = 1.0;
        float r42990 = 0.5;
        float r42991 = r42988 * r42990;
        float r42992 = r42989 - r42991;
        float r42993 = r42988 * r42992;
        return r42993;
}

double f_id(double x) {
        double r42994 = x;
        double r42995 = 1.0;
        double r42996 = 0.5;
        double r42997 = r42994 * r42996;
        double r42998 = r42995 - r42997;
        double r42999 = r42994 * r42998;
        return r42999;
}


double f_of(float x) {
        float r43000 = x;
        float r43001 = 1.0;
        float r43002 = 0.5;
        float r43003 = r43000 * r43002;
        float r43004 = r43001 - r43003;
        float r43005 = r43000 * r43004;
        return r43005;
}

double f_od(double x) {
        double r43006 = x;
        double r43007 = 1.0;
        double r43008 = 0.5;
        double r43009 = r43006 * r43008;
        double r43010 = r43007 - r43009;
        double r43011 = r43006 * r43010;
        return r43011;
}

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 r43012, r43013, r43014, r43015, r43016, r43017;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r43012);
        mpfr_init_set_str(r43013, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r43014, "0.5", 10, MPFR_RNDN);
        mpfr_init(r43015);
        mpfr_init(r43016);
        mpfr_init(r43017);
}

double f_im(double x) {
        mpfr_set_d(r43012, x, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r43015, r43012, r43014, MPFR_RNDN);
        mpfr_sub(r43016, r43013, r43015, MPFR_RNDN);
        mpfr_mul(r43017, r43012, r43016, MPFR_RNDN);
        return mpfr_get_d(r43017, MPFR_RNDN);
}

static mpfr_t r43018, r43019, r43020, r43021, r43022, r43023;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r43018);
        mpfr_init_set_str(r43019, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r43020, "0.5", 10, MPFR_RNDN);
        mpfr_init(r43021);
        mpfr_init(r43022);
        mpfr_init(r43023);
}

double f_fm(double x) {
        mpfr_set_d(r43018, x, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r43021, r43018, r43020, MPFR_RNDN);
        mpfr_sub(r43022, r43019, r43021, MPFR_RNDN);
        mpfr_mul(r43023, r43018, r43022, MPFR_RNDN);
        return mpfr_get_d(r43023, MPFR_RNDN);
}

static mpfr_t r43024, r43025, r43026, r43027, r43028, r43029;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r43024);
        mpfr_init_set_str(r43025, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r43026, "0.5", 10, MPFR_RNDN);
        mpfr_init(r43027);
        mpfr_init(r43028);
        mpfr_init(r43029);
}

double f_dm(double x) {
        mpfr_set_d(r43024, x, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r43027, r43024, r43026, MPFR_RNDN);
        mpfr_sub(r43028, r43025, r43027, MPFR_RNDN);
        mpfr_mul(r43029, r43024, r43028, MPFR_RNDN);
        return mpfr_get_d(r43029, MPFR_RNDN);
}

