#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, B";

double f_if(float x, float y, float z) {
        float r42743 = x;
        float r42744 = y;
        float r42745 = z;
        float r42746 = 0.0692910599291889;
        float r42747 = r42745 * r42746;
        float r42748 = 0.4917317610505968;
        float r42749 = r42747 + r42748;
        float r42750 = r42749 * r42745;
        float r42751 = 0.279195317918525;
        float r42752 = r42750 + r42751;
        float r42753 = r42744 * r42752;
        float r42754 = 6.012459259764103;
        float r42755 = r42745 + r42754;
        float r42756 = r42755 * r42745;
        float r42757 = 3.350343815022304;
        float r42758 = r42756 + r42757;
        float r42759 = r42753 / r42758;
        float r42760 = r42743 + r42759;
        return r42760;
}

double f_id(double x, double y, double z) {
        double r42761 = x;
        double r42762 = y;
        double r42763 = z;
        double r42764 = 0.0692910599291889;
        double r42765 = r42763 * r42764;
        double r42766 = 0.4917317610505968;
        double r42767 = r42765 + r42766;
        double r42768 = r42767 * r42763;
        double r42769 = 0.279195317918525;
        double r42770 = r42768 + r42769;
        double r42771 = r42762 * r42770;
        double r42772 = 6.012459259764103;
        double r42773 = r42763 + r42772;
        double r42774 = r42773 * r42763;
        double r42775 = 3.350343815022304;
        double r42776 = r42774 + r42775;
        double r42777 = r42771 / r42776;
        double r42778 = r42761 + r42777;
        return r42778;
}


double f_of(float x, float y, float z) {
        float r42779 = z;
        float r42780 = -449136846330.7665;
        bool r42781 = r42779 <= r42780;
        float r42782 = x;
        float r42783 = y;
        float r42784 = 0.0692910599291889;
        float r42785 = r42783 * r42784;
        float r42786 = r42782 + r42785;
        float r42787 = r42783 / r42779;
        float r42788 = 0.40462203869992125;
        float r42789 = r42788 / r42779;
        float r42790 = 0.07512208616047561;
        float r42791 = r42789 - r42790;
        float r42792 = r42787 * r42791;
        float r42793 = r42786 - r42792;
        float r42794 = 1.1209319314423736e-07;
        bool r42795 = r42779 <= r42794;
        float r42796 = 6.012459259764103;
        float r42797 = r42779 + r42796;
        float r42798 = r42797 * r42779;
        float r42799 = 3.350343815022304;
        float r42800 = r42798 + r42799;
        float r42801 = sqrt(r42800);
        float r42802 = r42783 / r42801;
        float r42803 = r42779 * r42784;
        float r42804 = 0.4917317610505968;
        float r42805 = r42803 + r42804;
        float r42806 = r42805 * r42779;
        float r42807 = 0.279195317918525;
        float r42808 = r42806 + r42807;
        float r42809 = r42808 / r42801;
        float r42810 = r42802 * r42809;
        float r42811 = r42782 + r42810;
        float r42812 = r42795 ? r42811 : r42793;
        float r42813 = r42781 ? r42793 : r42812;
        return r42813;
}

double f_od(double x, double y, double z) {
        double r42814 = z;
        double r42815 = -449136846330.7665;
        bool r42816 = r42814 <= r42815;
        double r42817 = x;
        double r42818 = y;
        double r42819 = 0.0692910599291889;
        double r42820 = r42818 * r42819;
        double r42821 = r42817 + r42820;
        double r42822 = r42818 / r42814;
        double r42823 = 0.40462203869992125;
        double r42824 = r42823 / r42814;
        double r42825 = 0.07512208616047561;
        double r42826 = r42824 - r42825;
        double r42827 = r42822 * r42826;
        double r42828 = r42821 - r42827;
        double r42829 = 1.1209319314423736e-07;
        bool r42830 = r42814 <= r42829;
        double r42831 = 6.012459259764103;
        double r42832 = r42814 + r42831;
        double r42833 = r42832 * r42814;
        double r42834 = 3.350343815022304;
        double r42835 = r42833 + r42834;
        double r42836 = sqrt(r42835);
        double r42837 = r42818 / r42836;
        double r42838 = r42814 * r42819;
        double r42839 = 0.4917317610505968;
        double r42840 = r42838 + r42839;
        double r42841 = r42840 * r42814;
        double r42842 = 0.279195317918525;
        double r42843 = r42841 + r42842;
        double r42844 = r42843 / r42836;
        double r42845 = r42837 * r42844;
        double r42846 = r42817 + r42845;
        double r42847 = r42830 ? r42846 : r42828;
        double r42848 = r42816 ? r42828 : r42847;
        return r42848;
}

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 r42849, r42850, r42851, r42852, r42853, r42854, r42855, r42856, r42857, r42858, r42859, r42860, r42861, r42862, r42863, r42864, r42865, r42866;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r42849);
        mpfr_init(r42850);
        mpfr_init(r42851);
        mpfr_init_set_str(r42852, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r42853);
        mpfr_init_set_str(r42854, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r42855);
        mpfr_init(r42856);
        mpfr_init_set_str(r42857, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r42858);
        mpfr_init(r42859);
        mpfr_init_set_str(r42860, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r42861);
        mpfr_init(r42862);
        mpfr_init_set_str(r42863, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r42864);
        mpfr_init(r42865);
        mpfr_init(r42866);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r42849, x, MPFR_RNDN);
        mpfr_set_d(r42850, y, MPFR_RNDN);
        mpfr_set_d(r42851, z, MPFR_RNDN);
        ;
        mpfr_mul(r42853, r42851, r42852, MPFR_RNDN);
        ;
        mpfr_add(r42855, r42853, r42854, MPFR_RNDN);
        mpfr_mul(r42856, r42855, r42851, MPFR_RNDN);
        ;
        mpfr_add(r42858, r42856, r42857, MPFR_RNDN);
        mpfr_mul(r42859, r42850, r42858, MPFR_RNDN);
        ;
        mpfr_add(r42861, r42851, r42860, MPFR_RNDN);
        mpfr_mul(r42862, r42861, r42851, MPFR_RNDN);
        ;
        mpfr_add(r42864, r42862, r42863, MPFR_RNDN);
        mpfr_div(r42865, r42859, r42864, MPFR_RNDN);
        mpfr_add(r42866, r42849, r42865, MPFR_RNDN);
        return mpfr_get_d(r42866, MPFR_RNDN);
}

static mpfr_t r42867, r42868, r42869, r42870, r42871, r42872, r42873, r42874, r42875, r42876, r42877, r42878, r42879, r42880, r42881, r42882, r42883, r42884, r42885, r42886, r42887, r42888, r42889, r42890, r42891, r42892, r42893, r42894, r42895, r42896, r42897, r42898, r42899, r42900, r42901;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42867);
        mpfr_init_set_str(r42868, "-449136846330.7665", 10, MPFR_RNDN);
        mpfr_init(r42869);
        mpfr_init(r42870);
        mpfr_init(r42871);
        mpfr_init_set_str(r42872, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r42873);
        mpfr_init(r42874);
        mpfr_init(r42875);
        mpfr_init_set_str(r42876, "0.40462203869992125", 10, MPFR_RNDN);
        mpfr_init(r42877);
        mpfr_init_set_str(r42878, "0.07512208616047561", 10, MPFR_RNDN);
        mpfr_init(r42879);
        mpfr_init(r42880);
        mpfr_init(r42881);
        mpfr_init_set_str(r42882, "1.1209319314423736e-07", 10, MPFR_RNDN);
        mpfr_init(r42883);
        mpfr_init_set_str(r42884, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r42885);
        mpfr_init(r42886);
        mpfr_init_set_str(r42887, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r42888);
        mpfr_init(r42889);
        mpfr_init(r42890);
        mpfr_init(r42891);
        mpfr_init_set_str(r42892, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r42893);
        mpfr_init(r42894);
        mpfr_init_set_str(r42895, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r42896);
        mpfr_init(r42897);
        mpfr_init(r42898);
        mpfr_init(r42899);
        mpfr_init(r42900);
        mpfr_init(r42901);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r42867, z, MPFR_RNDN);
        ;
        mpfr_set_si(r42869, mpfr_cmp(r42867, r42868) <= 0, MPFR_RNDN);
        mpfr_set_d(r42870, x, MPFR_RNDN);
        mpfr_set_d(r42871, y, MPFR_RNDN);
        ;
        mpfr_mul(r42873, r42871, r42872, MPFR_RNDN);
        mpfr_add(r42874, r42870, r42873, MPFR_RNDN);
        mpfr_div(r42875, r42871, r42867, MPFR_RNDN);
        ;
        mpfr_div(r42877, r42876, r42867, MPFR_RNDN);
        ;
        mpfr_sub(r42879, r42877, r42878, MPFR_RNDN);
        mpfr_mul(r42880, r42875, r42879, MPFR_RNDN);
        mpfr_sub(r42881, r42874, r42880, MPFR_RNDN);
        ;
        mpfr_set_si(r42883, mpfr_cmp(r42867, r42882) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r42885, r42867, r42884, MPFR_RNDN);
        mpfr_mul(r42886, r42885, r42867, MPFR_RNDN);
        ;
        mpfr_add(r42888, r42886, r42887, MPFR_RNDN);
        mpfr_sqrt(r42889, r42888, MPFR_RNDN);
        mpfr_div(r42890, r42871, r42889, MPFR_RNDN);
        mpfr_mul(r42891, r42867, r42872, MPFR_RNDN);
        ;
        mpfr_add(r42893, r42891, r42892, MPFR_RNDN);
        mpfr_mul(r42894, r42893, r42867, MPFR_RNDN);
        ;
        mpfr_add(r42896, r42894, r42895, MPFR_RNDN);
        mpfr_div(r42897, r42896, r42889, MPFR_RNDN);
        mpfr_mul(r42898, r42890, r42897, MPFR_RNDN);
        mpfr_add(r42899, r42870, r42898, MPFR_RNDN);
        if (mpfr_get_si(r42883, MPFR_RNDN)) { mpfr_set(r42900, r42899, MPFR_RNDN); } else { mpfr_set(r42900, r42881, MPFR_RNDN); };
        if (mpfr_get_si(r42869, MPFR_RNDN)) { mpfr_set(r42901, r42881, MPFR_RNDN); } else { mpfr_set(r42901, r42900, MPFR_RNDN); };
        return mpfr_get_d(r42901, MPFR_RNDN);
}

static mpfr_t r42902, r42903, r42904, r42905, r42906, r42907, r42908, r42909, r42910, r42911, r42912, r42913, r42914, r42915, r42916, r42917, r42918, r42919, r42920, r42921, r42922, r42923, r42924, r42925, r42926, r42927, r42928, r42929, r42930, r42931, r42932, r42933, r42934, r42935, r42936;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r42902);
        mpfr_init_set_str(r42903, "-449136846330.7665", 10, MPFR_RNDN);
        mpfr_init(r42904);
        mpfr_init(r42905);
        mpfr_init(r42906);
        mpfr_init_set_str(r42907, "0.0692910599291889", 10, MPFR_RNDN);
        mpfr_init(r42908);
        mpfr_init(r42909);
        mpfr_init(r42910);
        mpfr_init_set_str(r42911, "0.40462203869992125", 10, MPFR_RNDN);
        mpfr_init(r42912);
        mpfr_init_set_str(r42913, "0.07512208616047561", 10, MPFR_RNDN);
        mpfr_init(r42914);
        mpfr_init(r42915);
        mpfr_init(r42916);
        mpfr_init_set_str(r42917, "1.1209319314423736e-07", 10, MPFR_RNDN);
        mpfr_init(r42918);
        mpfr_init_set_str(r42919, "6.012459259764103", 10, MPFR_RNDN);
        mpfr_init(r42920);
        mpfr_init(r42921);
        mpfr_init_set_str(r42922, "3.350343815022304", 10, MPFR_RNDN);
        mpfr_init(r42923);
        mpfr_init(r42924);
        mpfr_init(r42925);
        mpfr_init(r42926);
        mpfr_init_set_str(r42927, "0.4917317610505968", 10, MPFR_RNDN);
        mpfr_init(r42928);
        mpfr_init(r42929);
        mpfr_init_set_str(r42930, "0.279195317918525", 10, MPFR_RNDN);
        mpfr_init(r42931);
        mpfr_init(r42932);
        mpfr_init(r42933);
        mpfr_init(r42934);
        mpfr_init(r42935);
        mpfr_init(r42936);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r42902, z, MPFR_RNDN);
        ;
        mpfr_set_si(r42904, mpfr_cmp(r42902, r42903) <= 0, MPFR_RNDN);
        mpfr_set_d(r42905, x, MPFR_RNDN);
        mpfr_set_d(r42906, y, MPFR_RNDN);
        ;
        mpfr_mul(r42908, r42906, r42907, MPFR_RNDN);
        mpfr_add(r42909, r42905, r42908, MPFR_RNDN);
        mpfr_div(r42910, r42906, r42902, MPFR_RNDN);
        ;
        mpfr_div(r42912, r42911, r42902, MPFR_RNDN);
        ;
        mpfr_sub(r42914, r42912, r42913, MPFR_RNDN);
        mpfr_mul(r42915, r42910, r42914, MPFR_RNDN);
        mpfr_sub(r42916, r42909, r42915, MPFR_RNDN);
        ;
        mpfr_set_si(r42918, mpfr_cmp(r42902, r42917) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r42920, r42902, r42919, MPFR_RNDN);
        mpfr_mul(r42921, r42920, r42902, MPFR_RNDN);
        ;
        mpfr_add(r42923, r42921, r42922, MPFR_RNDN);
        mpfr_sqrt(r42924, r42923, MPFR_RNDN);
        mpfr_div(r42925, r42906, r42924, MPFR_RNDN);
        mpfr_mul(r42926, r42902, r42907, MPFR_RNDN);
        ;
        mpfr_add(r42928, r42926, r42927, MPFR_RNDN);
        mpfr_mul(r42929, r42928, r42902, MPFR_RNDN);
        ;
        mpfr_add(r42931, r42929, r42930, MPFR_RNDN);
        mpfr_div(r42932, r42931, r42924, MPFR_RNDN);
        mpfr_mul(r42933, r42925, r42932, MPFR_RNDN);
        mpfr_add(r42934, r42905, r42933, MPFR_RNDN);
        if (mpfr_get_si(r42918, MPFR_RNDN)) { mpfr_set(r42935, r42934, MPFR_RNDN); } else { mpfr_set(r42935, r42916, MPFR_RNDN); };
        if (mpfr_get_si(r42904, MPFR_RNDN)) { mpfr_set(r42936, r42916, MPFR_RNDN); } else { mpfr_set(r42936, r42935, MPFR_RNDN); };
        return mpfr_get_d(r42936, MPFR_RNDN);
}

