#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 r41495 = x;
        float r41496 = y;
        float r41497 = log(r41496);
        float r41498 = r41495 * r41497;
        float r41499 = r41498 - r41496;
        float r41500 = z;
        float r41501 = r41499 - r41500;
        float r41502 = t;
        float r41503 = log(r41502);
        float r41504 = r41501 + r41503;
        return r41504;
}

double f_id(double x, double y, double z, double t) {
        double r41505 = x;
        double r41506 = y;
        double r41507 = log(r41506);
        double r41508 = r41505 * r41507;
        double r41509 = r41508 - r41506;
        double r41510 = z;
        double r41511 = r41509 - r41510;
        double r41512 = t;
        double r41513 = log(r41512);
        double r41514 = r41511 + r41513;
        return r41514;
}


double f_of(float x, float y, float z, float t) {
        float r41515 = x;
        float r41516 = y;
        float r41517 = log(r41516);
        float r41518 = r41515 * r41517;
        float r41519 = r41518 - r41516;
        float r41520 = z;
        float r41521 = r41519 - r41520;
        float r41522 = t;
        float r41523 = log(r41522);
        float r41524 = r41521 + r41523;
        return r41524;
}

double f_od(double x, double y, double z, double t) {
        double r41525 = x;
        double r41526 = y;
        double r41527 = log(r41526);
        double r41528 = r41525 * r41527;
        double r41529 = r41528 - r41526;
        double r41530 = z;
        double r41531 = r41529 - r41530;
        double r41532 = t;
        double r41533 = log(r41532);
        double r41534 = r41531 + r41533;
        return r41534;
}

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 r41535, r41536, r41537, r41538, r41539, r41540, r41541, r41542, r41543, r41544;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r41535);
        mpfr_init(r41536);
        mpfr_init(r41537);
        mpfr_init(r41538);
        mpfr_init(r41539);
        mpfr_init(r41540);
        mpfr_init(r41541);
        mpfr_init(r41542);
        mpfr_init(r41543);
        mpfr_init(r41544);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r41535, x, MPFR_RNDN);
        mpfr_set_d(r41536, y, MPFR_RNDN);
        mpfr_log(r41537, r41536, MPFR_RNDN);
        mpfr_mul(r41538, r41535, r41537, MPFR_RNDN);
        mpfr_sub(r41539, r41538, r41536, MPFR_RNDN);
        mpfr_set_d(r41540, z, MPFR_RNDN);
        mpfr_sub(r41541, r41539, r41540, MPFR_RNDN);
        mpfr_set_d(r41542, t, MPFR_RNDN);
        mpfr_log(r41543, r41542, MPFR_RNDN);
        mpfr_add(r41544, r41541, r41543, MPFR_RNDN);
        return mpfr_get_d(r41544, MPFR_RNDN);
}

static mpfr_t r41545, r41546, r41547, r41548, r41549, r41550, r41551, r41552, r41553, r41554;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r41545);
        mpfr_init(r41546);
        mpfr_init(r41547);
        mpfr_init(r41548);
        mpfr_init(r41549);
        mpfr_init(r41550);
        mpfr_init(r41551);
        mpfr_init(r41552);
        mpfr_init(r41553);
        mpfr_init(r41554);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r41545, x, MPFR_RNDN);
        mpfr_set_d(r41546, y, MPFR_RNDN);
        mpfr_log(r41547, r41546, MPFR_RNDN);
        mpfr_mul(r41548, r41545, r41547, MPFR_RNDN);
        mpfr_sub(r41549, r41548, r41546, MPFR_RNDN);
        mpfr_set_d(r41550, z, MPFR_RNDN);
        mpfr_sub(r41551, r41549, r41550, MPFR_RNDN);
        mpfr_set_d(r41552, t, MPFR_RNDN);
        mpfr_log(r41553, r41552, MPFR_RNDN);
        mpfr_add(r41554, r41551, r41553, MPFR_RNDN);
        return mpfr_get_d(r41554, MPFR_RNDN);
}

static mpfr_t r41555, r41556, r41557, r41558, r41559, r41560, r41561, r41562, r41563, r41564;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r41555);
        mpfr_init(r41556);
        mpfr_init(r41557);
        mpfr_init(r41558);
        mpfr_init(r41559);
        mpfr_init(r41560);
        mpfr_init(r41561);
        mpfr_init(r41562);
        mpfr_init(r41563);
        mpfr_init(r41564);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r41555, x, MPFR_RNDN);
        mpfr_set_d(r41556, y, MPFR_RNDN);
        mpfr_log(r41557, r41556, MPFR_RNDN);
        mpfr_mul(r41558, r41555, r41557, MPFR_RNDN);
        mpfr_sub(r41559, r41558, r41556, MPFR_RNDN);
        mpfr_set_d(r41560, z, MPFR_RNDN);
        mpfr_sub(r41561, r41559, r41560, MPFR_RNDN);
        mpfr_set_d(r41562, t, MPFR_RNDN);
        mpfr_log(r41563, r41562, MPFR_RNDN);
        mpfr_add(r41564, r41561, r41563, MPFR_RNDN);
        return mpfr_get_d(r41564, MPFR_RNDN);
}

