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

char *name = "Probabilities in a clustering algorithm";

double f_if(float cp, float cn, float t, float s) {
        float r25117 = 1.0f;
        float r25118 = s;
        float r25119 = -r25118;
        float r25120 = exp(r25119);
        float r25121 = r25117 + r25120;
        float r25122 = r25117 / r25121;
        float r25123 = cp;
        float r25124 = pow(r25122, r25123);
        float r25125 = r25117 - r25122;
        float r25126 = cn;
        float r25127 = pow(r25125, r25126);
        float r25128 = r25124 * r25127;
        float r25129 = t;
        float r25130 = -r25129;
        float r25131 = exp(r25130);
        float r25132 = r25117 + r25131;
        float r25133 = r25117 / r25132;
        float r25134 = pow(r25133, r25123);
        float r25135 = r25117 - r25133;
        float r25136 = pow(r25135, r25126);
        float r25137 = r25134 * r25136;
        float r25138 = r25128 / r25137;
        return r25138;
}

double f_id(double cp, double cn, double t, double s) {
        double r25139 = 1.0;
        double r25140 = s;
        double r25141 = -r25140;
        double r25142 = exp(r25141);
        double r25143 = r25139 + r25142;
        double r25144 = r25139 / r25143;
        double r25145 = cp;
        double r25146 = pow(r25144, r25145);
        double r25147 = r25139 - r25144;
        double r25148 = cn;
        double r25149 = pow(r25147, r25148);
        double r25150 = r25146 * r25149;
        double r25151 = t;
        double r25152 = -r25151;
        double r25153 = exp(r25152);
        double r25154 = r25139 + r25153;
        double r25155 = r25139 / r25154;
        double r25156 = pow(r25155, r25145);
        double r25157 = r25139 - r25155;
        double r25158 = pow(r25157, r25148);
        double r25159 = r25156 * r25158;
        double r25160 = r25150 / r25159;
        return r25160;
}


double f_of(float cp, float cn, float t, float s) {
        float r25161 = 1.0f;
        float r25162 = s;
        float r25163 = -r25162;
        float r25164 = exp(r25163);
        float r25165 = r25161 + r25164;
        float r25166 = r25161 / r25165;
        float r25167 = r25161 - r25166;
        float r25168 = cn;
        float r25169 = pow(r25167, r25168);
        float r25170 = t;
        float r25171 = -r25170;
        float r25172 = exp(r25171);
        float r25173 = r25161 + r25172;
        float r25174 = r25161 / r25173;
        float r25175 = r25161 - r25174;
        float r25176 = pow(r25175, r25168);
        float r25177 = r25169 / r25176;
        float r25178 = cp;
        float r25179 = pow(r25166, r25178);
        float r25180 = 0.5f;
        float r25181 = r25170 * r25180;
        float r25182 = log(r25180);
        float r25183 = r25181 + r25182;
        float r25184 = r25183 * r25178;
        float r25185 = r25161 + r25184;
        float r25186 = r25179 / r25185;
        float r25187 = r25177 * r25186;
        return r25187;
}

double f_od(double cp, double cn, double t, double s) {
        double r25188 = 1.0;
        double r25189 = s;
        double r25190 = -r25189;
        double r25191 = exp(r25190);
        double r25192 = r25188 + r25191;
        double r25193 = r25188 / r25192;
        double r25194 = r25188 - r25193;
        double r25195 = cn;
        double r25196 = pow(r25194, r25195);
        double r25197 = t;
        double r25198 = -r25197;
        double r25199 = exp(r25198);
        double r25200 = r25188 + r25199;
        double r25201 = r25188 / r25200;
        double r25202 = r25188 - r25201;
        double r25203 = pow(r25202, r25195);
        double r25204 = r25196 / r25203;
        double r25205 = cp;
        double r25206 = pow(r25193, r25205);
        double r25207 = 0.5;
        double r25208 = r25197 * r25207;
        double r25209 = log(r25207);
        double r25210 = r25208 + r25209;
        double r25211 = r25210 * r25205;
        double r25212 = r25188 + r25211;
        double r25213 = r25206 / r25212;
        double r25214 = r25204 * r25213;
        return r25214;
}

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 r25215, r25216, r25217, r25218, r25219, r25220, r25221, r25222, r25223, r25224, r25225, r25226, r25227, r25228, r25229, r25230, r25231, r25232, r25233, r25234, r25235, r25236;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r25215, "1", 10, MPFR_RNDN);
        mpfr_init(r25216);
        mpfr_init(r25217);
        mpfr_init(r25218);
        mpfr_init(r25219);
        mpfr_init(r25220);
        mpfr_init(r25221);
        mpfr_init(r25222);
        mpfr_init(r25223);
        mpfr_init(r25224);
        mpfr_init(r25225);
        mpfr_init(r25226);
        mpfr_init(r25227);
        mpfr_init(r25228);
        mpfr_init(r25229);
        mpfr_init(r25230);
        mpfr_init(r25231);
        mpfr_init(r25232);
        mpfr_init(r25233);
        mpfr_init(r25234);
        mpfr_init(r25235);
        mpfr_init(r25236);
}

double f_im(double cp, double cn, double t, double s) {
        ;
        mpfr_set_d(r25216, s, MPFR_RNDN);
        mpfr_neg(r25217, r25216, MPFR_RNDN);
        mpfr_exp(r25218, r25217, MPFR_RNDN);
        mpfr_add(r25219, r25215, r25218, MPFR_RNDN);
        mpfr_div(r25220, r25215, r25219, MPFR_RNDN);
        mpfr_set_d(r25221, cp, MPFR_RNDN);
        mpfr_pow(r25222, r25220, r25221, MPFR_RNDN);
        mpfr_sub(r25223, r25215, r25220, MPFR_RNDN);
        mpfr_set_d(r25224, cn, MPFR_RNDN);
        mpfr_pow(r25225, r25223, r25224, MPFR_RNDN);
        mpfr_mul(r25226, r25222, r25225, MPFR_RNDN);
        mpfr_set_d(r25227, t, MPFR_RNDN);
        mpfr_neg(r25228, r25227, MPFR_RNDN);
        mpfr_exp(r25229, r25228, MPFR_RNDN);
        mpfr_add(r25230, r25215, r25229, MPFR_RNDN);
        mpfr_div(r25231, r25215, r25230, MPFR_RNDN);
        mpfr_pow(r25232, r25231, r25221, MPFR_RNDN);
        mpfr_sub(r25233, r25215, r25231, MPFR_RNDN);
        mpfr_pow(r25234, r25233, r25224, MPFR_RNDN);
        mpfr_mul(r25235, r25232, r25234, MPFR_RNDN);
        mpfr_div(r25236, r25226, r25235, MPFR_RNDN);
        return mpfr_get_d(r25236, MPFR_RNDN);
}

static mpfr_t r25237, r25238, r25239, r25240, r25241, r25242, r25243, r25244, r25245, r25246, r25247, r25248, r25249, r25250, r25251, r25252, r25253, r25254, r25255, r25256, r25257, r25258, r25259, r25260, r25261, r25262, r25263;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r25237, "1", 10, MPFR_RNDN);
        mpfr_init(r25238);
        mpfr_init(r25239);
        mpfr_init(r25240);
        mpfr_init(r25241);
        mpfr_init(r25242);
        mpfr_init(r25243);
        mpfr_init(r25244);
        mpfr_init(r25245);
        mpfr_init(r25246);
        mpfr_init(r25247);
        mpfr_init(r25248);
        mpfr_init(r25249);
        mpfr_init(r25250);
        mpfr_init(r25251);
        mpfr_init(r25252);
        mpfr_init(r25253);
        mpfr_init(r25254);
        mpfr_init(r25255);
        mpfr_init_set_str(r25256, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25257);
        mpfr_init(r25258);
        mpfr_init(r25259);
        mpfr_init(r25260);
        mpfr_init(r25261);
        mpfr_init(r25262);
        mpfr_init(r25263);
}

double f_fm(double cp, double cn, double t, double s) {
        ;
        mpfr_set_d(r25238, s, MPFR_RNDN);
        mpfr_neg(r25239, r25238, MPFR_RNDN);
        mpfr_exp(r25240, r25239, MPFR_RNDN);
        mpfr_add(r25241, r25237, r25240, MPFR_RNDN);
        mpfr_div(r25242, r25237, r25241, MPFR_RNDN);
        mpfr_sub(r25243, r25237, r25242, MPFR_RNDN);
        mpfr_set_d(r25244, cn, MPFR_RNDN);
        mpfr_pow(r25245, r25243, r25244, MPFR_RNDN);
        mpfr_set_d(r25246, t, MPFR_RNDN);
        mpfr_neg(r25247, r25246, MPFR_RNDN);
        mpfr_exp(r25248, r25247, MPFR_RNDN);
        mpfr_add(r25249, r25237, r25248, MPFR_RNDN);
        mpfr_div(r25250, r25237, r25249, MPFR_RNDN);
        mpfr_sub(r25251, r25237, r25250, MPFR_RNDN);
        mpfr_pow(r25252, r25251, r25244, MPFR_RNDN);
        mpfr_div(r25253, r25245, r25252, MPFR_RNDN);
        mpfr_set_d(r25254, cp, MPFR_RNDN);
        mpfr_pow(r25255, r25242, r25254, MPFR_RNDN);
        ;
        mpfr_mul(r25257, r25246, r25256, MPFR_RNDN);
        mpfr_log(r25258, r25256, MPFR_RNDN);
        mpfr_add(r25259, r25257, r25258, MPFR_RNDN);
        mpfr_mul(r25260, r25259, r25254, MPFR_RNDN);
        mpfr_add(r25261, r25237, r25260, MPFR_RNDN);
        mpfr_div(r25262, r25255, r25261, MPFR_RNDN);
        mpfr_mul(r25263, r25253, r25262, MPFR_RNDN);
        return mpfr_get_d(r25263, MPFR_RNDN);
}

static mpfr_t r25264, r25265, r25266, r25267, r25268, r25269, r25270, r25271, r25272, r25273, r25274, r25275, r25276, r25277, r25278, r25279, r25280, r25281, r25282, r25283, r25284, r25285, r25286, r25287, r25288, r25289, r25290;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1168);
        mpfr_init_set_str(r25264, "1", 10, MPFR_RNDN);
        mpfr_init(r25265);
        mpfr_init(r25266);
        mpfr_init(r25267);
        mpfr_init(r25268);
        mpfr_init(r25269);
        mpfr_init(r25270);
        mpfr_init(r25271);
        mpfr_init(r25272);
        mpfr_init(r25273);
        mpfr_init(r25274);
        mpfr_init(r25275);
        mpfr_init(r25276);
        mpfr_init(r25277);
        mpfr_init(r25278);
        mpfr_init(r25279);
        mpfr_init(r25280);
        mpfr_init(r25281);
        mpfr_init(r25282);
        mpfr_init_set_str(r25283, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25284);
        mpfr_init(r25285);
        mpfr_init(r25286);
        mpfr_init(r25287);
        mpfr_init(r25288);
        mpfr_init(r25289);
        mpfr_init(r25290);
}

double f_dm(double cp, double cn, double t, double s) {
        ;
        mpfr_set_d(r25265, s, MPFR_RNDN);
        mpfr_neg(r25266, r25265, MPFR_RNDN);
        mpfr_exp(r25267, r25266, MPFR_RNDN);
        mpfr_add(r25268, r25264, r25267, MPFR_RNDN);
        mpfr_div(r25269, r25264, r25268, MPFR_RNDN);
        mpfr_sub(r25270, r25264, r25269, MPFR_RNDN);
        mpfr_set_d(r25271, cn, MPFR_RNDN);
        mpfr_pow(r25272, r25270, r25271, MPFR_RNDN);
        mpfr_set_d(r25273, t, MPFR_RNDN);
        mpfr_neg(r25274, r25273, MPFR_RNDN);
        mpfr_exp(r25275, r25274, MPFR_RNDN);
        mpfr_add(r25276, r25264, r25275, MPFR_RNDN);
        mpfr_div(r25277, r25264, r25276, MPFR_RNDN);
        mpfr_sub(r25278, r25264, r25277, MPFR_RNDN);
        mpfr_pow(r25279, r25278, r25271, MPFR_RNDN);
        mpfr_div(r25280, r25272, r25279, MPFR_RNDN);
        mpfr_set_d(r25281, cp, MPFR_RNDN);
        mpfr_pow(r25282, r25269, r25281, MPFR_RNDN);
        ;
        mpfr_mul(r25284, r25273, r25283, MPFR_RNDN);
        mpfr_log(r25285, r25283, MPFR_RNDN);
        mpfr_add(r25286, r25284, r25285, MPFR_RNDN);
        mpfr_mul(r25287, r25286, r25281, MPFR_RNDN);
        mpfr_add(r25288, r25264, r25287, MPFR_RNDN);
        mpfr_div(r25289, r25282, r25288, MPFR_RNDN);
        mpfr_mul(r25290, r25280, r25289, MPFR_RNDN);
        return mpfr_get_d(r25290, MPFR_RNDN);
}

