#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 r42824 = x;
        float r42825 = y;
        float r42826 = 1.0;
        float r42827 = r42825 - r42826;
        float r42828 = r42824 * r42827;
        float r42829 = 0.5;
        float r42830 = r42825 * r42829;
        float r42831 = r42828 - r42830;
        float r42832 = 0.918938533204673;
        float r42833 = r42831 + r42832;
        return r42833;
}

double f_id(double x, double y) {
        double r42834 = x;
        double r42835 = y;
        double r42836 = 1.0;
        double r42837 = r42835 - r42836;
        double r42838 = r42834 * r42837;
        double r42839 = 0.5;
        double r42840 = r42835 * r42839;
        double r42841 = r42838 - r42840;
        double r42842 = 0.918938533204673;
        double r42843 = r42841 + r42842;
        return r42843;
}


double f_of(float x, float y) {
        float r42844 = x;
        float r42845 = y;
        float r42846 = 1.0;
        float r42847 = r42845 - r42846;
        float r42848 = r42844 * r42847;
        float r42849 = 0.5;
        float r42850 = r42845 * r42849;
        float r42851 = r42848 - r42850;
        float r42852 = 0.918938533204673;
        float r42853 = r42851 + r42852;
        return r42853;
}

double f_od(double x, double y) {
        double r42854 = x;
        double r42855 = y;
        double r42856 = 1.0;
        double r42857 = r42855 - r42856;
        double r42858 = r42854 * r42857;
        double r42859 = 0.5;
        double r42860 = r42855 * r42859;
        double r42861 = r42858 - r42860;
        double r42862 = 0.918938533204673;
        double r42863 = r42861 + r42862;
        return r42863;
}

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 r42864, r42865, r42866, r42867, r42868, r42869, r42870, r42871, r42872, r42873;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(656);
        mpfr_init(r42864);
        mpfr_init(r42865);
        mpfr_init_set_str(r42866, "1.0", 10, MPFR_RNDN);
        mpfr_init(r42867);
        mpfr_init(r42868);
        mpfr_init_set_str(r42869, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42870);
        mpfr_init(r42871);
        mpfr_init_set_str(r42872, "0.918938533204673", 10, MPFR_RNDN);
        mpfr_init(r42873);
}

double f_im(double x, double y) {
        mpfr_set_d(r42864, x, MPFR_RNDN);
        mpfr_set_d(r42865, y, MPFR_RNDN);
        ;
        mpfr_sub(r42867, r42865, r42866, MPFR_RNDN);
        mpfr_mul(r42868, r42864, r42867, MPFR_RNDN);
        ;
        mpfr_mul(r42870, r42865, r42869, MPFR_RNDN);
        mpfr_sub(r42871, r42868, r42870, MPFR_RNDN);
        ;
        mpfr_add(r42873, r42871, r42872, MPFR_RNDN);
        return mpfr_get_d(r42873, MPFR_RNDN);
}

static mpfr_t r42874, r42875, r42876, r42877, r42878, r42879, r42880, r42881, r42882, r42883;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(656);
        mpfr_init(r42874);
        mpfr_init(r42875);
        mpfr_init_set_str(r42876, "1.0", 10, MPFR_RNDN);
        mpfr_init(r42877);
        mpfr_init(r42878);
        mpfr_init_set_str(r42879, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42880);
        mpfr_init(r42881);
        mpfr_init_set_str(r42882, "0.918938533204673", 10, MPFR_RNDN);
        mpfr_init(r42883);
}

double f_fm(double x, double y) {
        mpfr_set_d(r42874, x, MPFR_RNDN);
        mpfr_set_d(r42875, y, MPFR_RNDN);
        ;
        mpfr_sub(r42877, r42875, r42876, MPFR_RNDN);
        mpfr_mul(r42878, r42874, r42877, MPFR_RNDN);
        ;
        mpfr_mul(r42880, r42875, r42879, MPFR_RNDN);
        mpfr_sub(r42881, r42878, r42880, MPFR_RNDN);
        ;
        mpfr_add(r42883, r42881, r42882, MPFR_RNDN);
        return mpfr_get_d(r42883, MPFR_RNDN);
}

static mpfr_t r42884, r42885, r42886, r42887, r42888, r42889, r42890, r42891, r42892, r42893;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(656);
        mpfr_init(r42884);
        mpfr_init(r42885);
        mpfr_init_set_str(r42886, "1.0", 10, MPFR_RNDN);
        mpfr_init(r42887);
        mpfr_init(r42888);
        mpfr_init_set_str(r42889, "0.5", 10, MPFR_RNDN);
        mpfr_init(r42890);
        mpfr_init(r42891);
        mpfr_init_set_str(r42892, "0.918938533204673", 10, MPFR_RNDN);
        mpfr_init(r42893);
}

double f_dm(double x, double y) {
        mpfr_set_d(r42884, x, MPFR_RNDN);
        mpfr_set_d(r42885, y, MPFR_RNDN);
        ;
        mpfr_sub(r42887, r42885, r42886, MPFR_RNDN);
        mpfr_mul(r42888, r42884, r42887, MPFR_RNDN);
        ;
        mpfr_mul(r42890, r42885, r42889, MPFR_RNDN);
        mpfr_sub(r42891, r42888, r42890, MPFR_RNDN);
        ;
        mpfr_add(r42893, r42891, r42892, MPFR_RNDN);
        return mpfr_get_d(r42893, MPFR_RNDN);
}

