#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 r42641 = x;
        float r42642 = y;
        float r42643 = 1.0;
        float r42644 = r42642 - r42643;
        float r42645 = r42641 * r42644;
        float r42646 = 0.5;
        float r42647 = r42642 * r42646;
        float r42648 = r42645 - r42647;
        float r42649 = 0.918938533204673;
        float r42650 = r42648 + r42649;
        return r42650;
}

double f_id(double x, double y) {
        double r42651 = x;
        double r42652 = y;
        double r42653 = 1.0;
        double r42654 = r42652 - r42653;
        double r42655 = r42651 * r42654;
        double r42656 = 0.5;
        double r42657 = r42652 * r42656;
        double r42658 = r42655 - r42657;
        double r42659 = 0.918938533204673;
        double r42660 = r42658 + r42659;
        return r42660;
}


double f_of(float x, float y) {
        float r42661 = x;
        float r42662 = y;
        float r42663 = 1.0;
        float r42664 = r42662 - r42663;
        float r42665 = r42661 * r42664;
        float r42666 = 0.5;
        float r42667 = r42662 * r42666;
        float r42668 = r42665 - r42667;
        float r42669 = 0.918938533204673;
        float r42670 = r42668 + r42669;
        return r42670;
}

double f_od(double x, double y) {
        double r42671 = x;
        double r42672 = y;
        double r42673 = 1.0;
        double r42674 = r42672 - r42673;
        double r42675 = r42671 * r42674;
        double r42676 = 0.5;
        double r42677 = r42672 * r42676;
        double r42678 = r42675 - r42677;
        double r42679 = 0.918938533204673;
        double r42680 = r42678 + r42679;
        return r42680;
}

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 r42681, r42682, r42683, r42684, r42685, r42686, r42687, r42688, r42689, r42690;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(656);
        mpfr_init(r42681);
        mpfr_init(r42682);
        mpfr_init_set_str(r42683, "1.0", 10, MPFR_RNDN);
        mpfr_init(r42684);
        mpfr_init(r42685);
        mpfr_init_set_str(r42686, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42687);
        mpfr_init(r42688);
        mpfr_init_set_str(r42689, "0.918938533204673", 10, MPFR_RNDN);
        mpfr_init(r42690);
}

double f_im(double x, double y) {
        mpfr_set_d(r42681, x, MPFR_RNDN);
        mpfr_set_d(r42682, y, MPFR_RNDN);
        ;
        mpfr_sub(r42684, r42682, r42683, MPFR_RNDN);
        mpfr_mul(r42685, r42681, r42684, MPFR_RNDN);
        ;
        mpfr_mul(r42687, r42682, r42686, MPFR_RNDN);
        mpfr_sub(r42688, r42685, r42687, MPFR_RNDN);
        ;
        mpfr_add(r42690, r42688, r42689, MPFR_RNDN);
        return mpfr_get_d(r42690, MPFR_RNDN);
}

static mpfr_t r42691, r42692, r42693, r42694, r42695, r42696, r42697, r42698, r42699, r42700;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(656);
        mpfr_init(r42691);
        mpfr_init(r42692);
        mpfr_init_set_str(r42693, "1.0", 10, MPFR_RNDN);
        mpfr_init(r42694);
        mpfr_init(r42695);
        mpfr_init_set_str(r42696, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42697);
        mpfr_init(r42698);
        mpfr_init_set_str(r42699, "0.918938533204673", 10, MPFR_RNDN);
        mpfr_init(r42700);
}

double f_fm(double x, double y) {
        mpfr_set_d(r42691, x, MPFR_RNDN);
        mpfr_set_d(r42692, y, MPFR_RNDN);
        ;
        mpfr_sub(r42694, r42692, r42693, MPFR_RNDN);
        mpfr_mul(r42695, r42691, r42694, MPFR_RNDN);
        ;
        mpfr_mul(r42697, r42692, r42696, MPFR_RNDN);
        mpfr_sub(r42698, r42695, r42697, MPFR_RNDN);
        ;
        mpfr_add(r42700, r42698, r42699, MPFR_RNDN);
        return mpfr_get_d(r42700, MPFR_RNDN);
}

static mpfr_t r42701, r42702, r42703, r42704, r42705, r42706, r42707, r42708, r42709, r42710;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(656);
        mpfr_init(r42701);
        mpfr_init(r42702);
        mpfr_init_set_str(r42703, "1.0", 10, MPFR_RNDN);
        mpfr_init(r42704);
        mpfr_init(r42705);
        mpfr_init_set_str(r42706, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42707);
        mpfr_init(r42708);
        mpfr_init_set_str(r42709, "0.918938533204673", 10, MPFR_RNDN);
        mpfr_init(r42710);
}

double f_dm(double x, double y) {
        mpfr_set_d(r42701, x, MPFR_RNDN);
        mpfr_set_d(r42702, y, MPFR_RNDN);
        ;
        mpfr_sub(r42704, r42702, r42703, MPFR_RNDN);
        mpfr_mul(r42705, r42701, r42704, MPFR_RNDN);
        ;
        mpfr_mul(r42707, r42702, r42706, MPFR_RNDN);
        mpfr_sub(r42708, r42705, r42707, MPFR_RNDN);
        ;
        mpfr_add(r42710, r42708, r42709, MPFR_RNDN);
        return mpfr_get_d(r42710, MPFR_RNDN);
}

