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

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

double f_if(float x, float y) {
        float r42483 = x;
        float r42484 = y;
        float r42485 = 1.0;
        float r42486 = r42484 - r42485;
        float r42487 = r42483 * r42486;
        float r42488 = 0.5;
        float r42489 = r42484 * r42488;
        float r42490 = r42487 - r42489;
        float r42491 = 0.918938533204673;
        float r42492 = r42490 + r42491;
        return r42492;
}

double f_id(double x, double y) {
        double r42493 = x;
        double r42494 = y;
        double r42495 = 1.0;
        double r42496 = r42494 - r42495;
        double r42497 = r42493 * r42496;
        double r42498 = 0.5;
        double r42499 = r42494 * r42498;
        double r42500 = r42497 - r42499;
        double r42501 = 0.918938533204673;
        double r42502 = r42500 + r42501;
        return r42502;
}


double f_of(float x, float y) {
        float r42503 = x;
        float r42504 = y;
        float r42505 = 1.0;
        float r42506 = r42504 - r42505;
        float r42507 = r42503 * r42506;
        float r42508 = 0.5;
        float r42509 = r42504 * r42508;
        float r42510 = r42507 - r42509;
        float r42511 = 0.918938533204673;
        float r42512 = r42510 + r42511;
        return r42512;
}

double f_od(double x, double y) {
        double r42513 = x;
        double r42514 = y;
        double r42515 = 1.0;
        double r42516 = r42514 - r42515;
        double r42517 = r42513 * r42516;
        double r42518 = 0.5;
        double r42519 = r42514 * r42518;
        double r42520 = r42517 - r42519;
        double r42521 = 0.918938533204673;
        double r42522 = r42520 + r42521;
        return r42522;
}

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 r42523, r42524, r42525, r42526, r42527, r42528, r42529, r42530, r42531, r42532;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(912);
        mpfr_init(r42523);
        mpfr_init(r42524);
        mpfr_init_set_str(r42525, "1.0", 10, MPFR_RNDN);
        mpfr_init(r42526);
        mpfr_init(r42527);
        mpfr_init_set_str(r42528, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42529);
        mpfr_init(r42530);
        mpfr_init_set_str(r42531, "0.918938533204673", 10, MPFR_RNDN);
        mpfr_init(r42532);
}

double f_im(double x, double y) {
        mpfr_set_d(r42523, x, MPFR_RNDN);
        mpfr_set_d(r42524, y, MPFR_RNDN);
        ;
        mpfr_sub(r42526, r42524, r42525, MPFR_RNDN);
        mpfr_mul(r42527, r42523, r42526, MPFR_RNDN);
        ;
        mpfr_mul(r42529, r42524, r42528, MPFR_RNDN);
        mpfr_sub(r42530, r42527, r42529, MPFR_RNDN);
        ;
        mpfr_add(r42532, r42530, r42531, MPFR_RNDN);
        return mpfr_get_d(r42532, MPFR_RNDN);
}

static mpfr_t r42533, r42534, r42535, r42536, r42537, r42538, r42539, r42540, r42541, r42542;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(912);
        mpfr_init(r42533);
        mpfr_init(r42534);
        mpfr_init_set_str(r42535, "1.0", 10, MPFR_RNDN);
        mpfr_init(r42536);
        mpfr_init(r42537);
        mpfr_init_set_str(r42538, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42539);
        mpfr_init(r42540);
        mpfr_init_set_str(r42541, "0.918938533204673", 10, MPFR_RNDN);
        mpfr_init(r42542);
}

double f_fm(double x, double y) {
        mpfr_set_d(r42533, x, MPFR_RNDN);
        mpfr_set_d(r42534, y, MPFR_RNDN);
        ;
        mpfr_sub(r42536, r42534, r42535, MPFR_RNDN);
        mpfr_mul(r42537, r42533, r42536, MPFR_RNDN);
        ;
        mpfr_mul(r42539, r42534, r42538, MPFR_RNDN);
        mpfr_sub(r42540, r42537, r42539, MPFR_RNDN);
        ;
        mpfr_add(r42542, r42540, r42541, MPFR_RNDN);
        return mpfr_get_d(r42542, MPFR_RNDN);
}

static mpfr_t r42543, r42544, r42545, r42546, r42547, r42548, r42549, r42550, r42551, r42552;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(912);
        mpfr_init(r42543);
        mpfr_init(r42544);
        mpfr_init_set_str(r42545, "1.0", 10, MPFR_RNDN);
        mpfr_init(r42546);
        mpfr_init(r42547);
        mpfr_init_set_str(r42548, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42549);
        mpfr_init(r42550);
        mpfr_init_set_str(r42551, "0.918938533204673", 10, MPFR_RNDN);
        mpfr_init(r42552);
}

double f_dm(double x, double y) {
        mpfr_set_d(r42543, x, MPFR_RNDN);
        mpfr_set_d(r42544, y, MPFR_RNDN);
        ;
        mpfr_sub(r42546, r42544, r42545, MPFR_RNDN);
        mpfr_mul(r42547, r42543, r42546, MPFR_RNDN);
        ;
        mpfr_mul(r42549, r42544, r42548, MPFR_RNDN);
        mpfr_sub(r42550, r42547, r42549, MPFR_RNDN);
        ;
        mpfr_add(r42552, r42550, r42551, MPFR_RNDN);
        return mpfr_get_d(r42552, MPFR_RNDN);
}

