#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, A";

double f_if(float x, float y) {
        float r43030 = x;
        float r43031 = 1.0;
        float r43032 = y;
        float r43033 = r43030 * r43032;
        float r43034 = r43031 - r43033;
        float r43035 = r43030 * r43034;
        return r43035;
}

double f_id(double x, double y) {
        double r43036 = x;
        double r43037 = 1.0;
        double r43038 = y;
        double r43039 = r43036 * r43038;
        double r43040 = r43037 - r43039;
        double r43041 = r43036 * r43040;
        return r43041;
}


double f_of(float x, float y) {
        float r43042 = x;
        float r43043 = 1.0;
        float r43044 = y;
        float r43045 = r43042 * r43044;
        float r43046 = r43043 - r43045;
        float r43047 = r43042 * r43046;
        return r43047;
}

double f_od(double x, double y) {
        double r43048 = x;
        double r43049 = 1.0;
        double r43050 = y;
        double r43051 = r43048 * r43050;
        double r43052 = r43049 - r43051;
        double r43053 = r43048 * r43052;
        return r43053;
}

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 r43054, r43055, r43056, r43057, r43058, r43059;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r43054);
        mpfr_init_set_str(r43055, "1.0", 10, MPFR_RNDN);
        mpfr_init(r43056);
        mpfr_init(r43057);
        mpfr_init(r43058);
        mpfr_init(r43059);
}

double f_im(double x, double y) {
        mpfr_set_d(r43054, x, MPFR_RNDN);
        ;
        mpfr_set_d(r43056, y, MPFR_RNDN);
        mpfr_mul(r43057, r43054, r43056, MPFR_RNDN);
        mpfr_sub(r43058, r43055, r43057, MPFR_RNDN);
        mpfr_mul(r43059, r43054, r43058, MPFR_RNDN);
        return mpfr_get_d(r43059, MPFR_RNDN);
}

static mpfr_t r43060, r43061, r43062, r43063, r43064, r43065;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r43060);
        mpfr_init_set_str(r43061, "1.0", 10, MPFR_RNDN);
        mpfr_init(r43062);
        mpfr_init(r43063);
        mpfr_init(r43064);
        mpfr_init(r43065);
}

double f_fm(double x, double y) {
        mpfr_set_d(r43060, x, MPFR_RNDN);
        ;
        mpfr_set_d(r43062, y, MPFR_RNDN);
        mpfr_mul(r43063, r43060, r43062, MPFR_RNDN);
        mpfr_sub(r43064, r43061, r43063, MPFR_RNDN);
        mpfr_mul(r43065, r43060, r43064, MPFR_RNDN);
        return mpfr_get_d(r43065, MPFR_RNDN);
}

static mpfr_t r43066, r43067, r43068, r43069, r43070, r43071;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r43066);
        mpfr_init_set_str(r43067, "1.0", 10, MPFR_RNDN);
        mpfr_init(r43068);
        mpfr_init(r43069);
        mpfr_init(r43070);
        mpfr_init(r43071);
}

double f_dm(double x, double y) {
        mpfr_set_d(r43066, x, MPFR_RNDN);
        ;
        mpfr_set_d(r43068, y, MPFR_RNDN);
        mpfr_mul(r43069, r43066, r43068, MPFR_RNDN);
        mpfr_sub(r43070, r43067, r43069, MPFR_RNDN);
        mpfr_mul(r43071, r43066, r43070, MPFR_RNDN);
        return mpfr_get_d(r43071, MPFR_RNDN);
}

