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

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

double f_if(float x, float y, float z, float t) {
        float r45014 = x;
        float r45015 = y;
        float r45016 = log(r45015);
        float r45017 = r45014 * r45016;
        float r45018 = r45017 - r45015;
        float r45019 = z;
        float r45020 = r45018 - r45019;
        float r45021 = t;
        float r45022 = log(r45021);
        float r45023 = r45020 + r45022;
        return r45023;
}

double f_id(double x, double y, double z, double t) {
        double r45024 = x;
        double r45025 = y;
        double r45026 = log(r45025);
        double r45027 = r45024 * r45026;
        double r45028 = r45027 - r45025;
        double r45029 = z;
        double r45030 = r45028 - r45029;
        double r45031 = t;
        double r45032 = log(r45031);
        double r45033 = r45030 + r45032;
        return r45033;
}


double f_of(float x, float y, float z, float t) {
        float r45034 = x;
        float r45035 = y;
        float r45036 = log(r45035);
        float r45037 = r45034 * r45036;
        float r45038 = r45037 - r45035;
        float r45039 = z;
        float r45040 = r45038 - r45039;
        float r45041 = t;
        float r45042 = log(r45041);
        float r45043 = r45040 + r45042;
        return r45043;
}

double f_od(double x, double y, double z, double t) {
        double r45044 = x;
        double r45045 = y;
        double r45046 = log(r45045);
        double r45047 = r45044 * r45046;
        double r45048 = r45047 - r45045;
        double r45049 = z;
        double r45050 = r45048 - r45049;
        double r45051 = t;
        double r45052 = log(r45051);
        double r45053 = r45050 + r45052;
        return r45053;
}

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 r45054, r45055, r45056, r45057, r45058, r45059, r45060, r45061, r45062, r45063;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45054);
        mpfr_init(r45055);
        mpfr_init(r45056);
        mpfr_init(r45057);
        mpfr_init(r45058);
        mpfr_init(r45059);
        mpfr_init(r45060);
        mpfr_init(r45061);
        mpfr_init(r45062);
        mpfr_init(r45063);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r45054, x, MPFR_RNDN);
        mpfr_set_d(r45055, y, MPFR_RNDN);
        mpfr_log(r45056, r45055, MPFR_RNDN);
        mpfr_mul(r45057, r45054, r45056, MPFR_RNDN);
        mpfr_sub(r45058, r45057, r45055, MPFR_RNDN);
        mpfr_set_d(r45059, z, MPFR_RNDN);
        mpfr_sub(r45060, r45058, r45059, MPFR_RNDN);
        mpfr_set_d(r45061, t, MPFR_RNDN);
        mpfr_log(r45062, r45061, MPFR_RNDN);
        mpfr_add(r45063, r45060, r45062, MPFR_RNDN);
        return mpfr_get_d(r45063, MPFR_RNDN);
}

static mpfr_t r45064, r45065, r45066, r45067, r45068, r45069, r45070, r45071, r45072, r45073;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45064);
        mpfr_init(r45065);
        mpfr_init(r45066);
        mpfr_init(r45067);
        mpfr_init(r45068);
        mpfr_init(r45069);
        mpfr_init(r45070);
        mpfr_init(r45071);
        mpfr_init(r45072);
        mpfr_init(r45073);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r45064, x, MPFR_RNDN);
        mpfr_set_d(r45065, y, MPFR_RNDN);
        mpfr_log(r45066, r45065, MPFR_RNDN);
        mpfr_mul(r45067, r45064, r45066, MPFR_RNDN);
        mpfr_sub(r45068, r45067, r45065, MPFR_RNDN);
        mpfr_set_d(r45069, z, MPFR_RNDN);
        mpfr_sub(r45070, r45068, r45069, MPFR_RNDN);
        mpfr_set_d(r45071, t, MPFR_RNDN);
        mpfr_log(r45072, r45071, MPFR_RNDN);
        mpfr_add(r45073, r45070, r45072, MPFR_RNDN);
        return mpfr_get_d(r45073, MPFR_RNDN);
}

static mpfr_t r45074, r45075, r45076, r45077, r45078, r45079, r45080, r45081, r45082, r45083;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45074);
        mpfr_init(r45075);
        mpfr_init(r45076);
        mpfr_init(r45077);
        mpfr_init(r45078);
        mpfr_init(r45079);
        mpfr_init(r45080);
        mpfr_init(r45081);
        mpfr_init(r45082);
        mpfr_init(r45083);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r45074, x, MPFR_RNDN);
        mpfr_set_d(r45075, y, MPFR_RNDN);
        mpfr_log(r45076, r45075, MPFR_RNDN);
        mpfr_mul(r45077, r45074, r45076, MPFR_RNDN);
        mpfr_sub(r45078, r45077, r45075, MPFR_RNDN);
        mpfr_set_d(r45079, z, MPFR_RNDN);
        mpfr_sub(r45080, r45078, r45079, MPFR_RNDN);
        mpfr_set_d(r45081, t, MPFR_RNDN);
        mpfr_log(r45082, r45081, MPFR_RNDN);
        mpfr_add(r45083, r45080, r45082, MPFR_RNDN);
        return mpfr_get_d(r45083, MPFR_RNDN);
}

