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

char *name = "Migdal et al, Equation (51)";

double f_if(float k, float n) {
        float r28223 = 1;
        float r28224 = k;
        float r28225 = sqrt(r28224);
        float r28226 = r28223 / r28225;
        float r28227 = 2;
        float r28228 = atan2(1.0, 0.0);
        float r28229 = r28227 * r28228;
        float r28230 = n;
        float r28231 = r28229 * r28230;
        float r28232 = r28223 - r28224;
        float r28233 = r28232 / r28227;
        float r28234 = pow(r28231, r28233);
        float r28235 = r28226 * r28234;
        return r28235;
}

double f_id(double k, double n) {
        double r28236 = 1;
        double r28237 = k;
        double r28238 = sqrt(r28237);
        double r28239 = r28236 / r28238;
        double r28240 = 2;
        double r28241 = atan2(1.0, 0.0);
        double r28242 = r28240 * r28241;
        double r28243 = n;
        double r28244 = r28242 * r28243;
        double r28245 = r28236 - r28237;
        double r28246 = r28245 / r28240;
        double r28247 = pow(r28244, r28246);
        double r28248 = r28239 * r28247;
        return r28248;
}


double f_of(float k, float n) {
        float r28249 = n;
        float r28250 = r28249 + r28249;
        float r28251 = sqrt(r28250);
        float r28252 = 2;
        float r28253 = sqrt(r28252);
        float r28254 = sqrt(r28249);
        float r28255 = atan2(1.0, 0.0);
        float r28256 = r28254 * r28255;
        float r28257 = r28253 * r28256;
        float r28258 = r28251 * r28257;
        float r28259 = 1;
        float r28260 = k;
        float r28261 = r28259 - r28260;
        float r28262 = r28261 / r28252;
        float r28263 = pow(r28258, r28262);
        float r28264 = sqrt(r28260);
        float r28265 = r28263 / r28264;
        return r28265;
}

double f_od(double k, double n) {
        double r28266 = n;
        double r28267 = r28266 + r28266;
        double r28268 = sqrt(r28267);
        double r28269 = 2;
        double r28270 = sqrt(r28269);
        double r28271 = sqrt(r28266);
        double r28272 = atan2(1.0, 0.0);
        double r28273 = r28271 * r28272;
        double r28274 = r28270 * r28273;
        double r28275 = r28268 * r28274;
        double r28276 = 1;
        double r28277 = k;
        double r28278 = r28276 - r28277;
        double r28279 = r28278 / r28269;
        double r28280 = pow(r28275, r28279);
        double r28281 = sqrt(r28277);
        double r28282 = r28280 / r28281;
        return r28282;
}

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 r28283, r28284, r28285, r28286, r28287, r28288, r28289, r28290, r28291, r28292, r28293, r28294, r28295;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r28283, "1", 10, MPFR_RNDN);
        mpfr_init(r28284);
        mpfr_init(r28285);
        mpfr_init(r28286);
        mpfr_init_set_str(r28287, "2", 10, MPFR_RNDN);
        mpfr_init(r28288);
        mpfr_init(r28289);
        mpfr_init(r28290);
        mpfr_init(r28291);
        mpfr_init(r28292);
        mpfr_init(r28293);
        mpfr_init(r28294);
        mpfr_init(r28295);
}

double f_im(double k, double n) {
        ;
        mpfr_set_d(r28284, k, MPFR_RNDN);
        mpfr_sqrt(r28285, r28284, MPFR_RNDN);
        mpfr_div(r28286, r28283, r28285, MPFR_RNDN);
        ;
        mpfr_const_pi(r28288, MPFR_RNDN);
        mpfr_mul(r28289, r28287, r28288, MPFR_RNDN);
        mpfr_set_d(r28290, n, MPFR_RNDN);
        mpfr_mul(r28291, r28289, r28290, MPFR_RNDN);
        mpfr_sub(r28292, r28283, r28284, MPFR_RNDN);
        mpfr_div(r28293, r28292, r28287, MPFR_RNDN);
        mpfr_pow(r28294, r28291, r28293, MPFR_RNDN);
        mpfr_mul(r28295, r28286, r28294, MPFR_RNDN);
        return mpfr_get_d(r28295, MPFR_RNDN);
}

static mpfr_t r28296, r28297, r28298, r28299, r28300, r28301, r28302, r28303, r28304, r28305, r28306, r28307, r28308, r28309, r28310, r28311, r28312;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28296);
        mpfr_init(r28297);
        mpfr_init(r28298);
        mpfr_init_set_str(r28299, "2", 10, MPFR_RNDN);
        mpfr_init(r28300);
        mpfr_init(r28301);
        mpfr_init(r28302);
        mpfr_init(r28303);
        mpfr_init(r28304);
        mpfr_init(r28305);
        mpfr_init_set_str(r28306, "1", 10, MPFR_RNDN);
        mpfr_init(r28307);
        mpfr_init(r28308);
        mpfr_init(r28309);
        mpfr_init(r28310);
        mpfr_init(r28311);
        mpfr_init(r28312);
}

double f_fm(double k, double n) {
        mpfr_set_d(r28296, n, MPFR_RNDN);
        mpfr_add(r28297, r28296, r28296, MPFR_RNDN);
        mpfr_sqrt(r28298, r28297, MPFR_RNDN);
        ;
        mpfr_sqrt(r28300, r28299, MPFR_RNDN);
        mpfr_sqrt(r28301, r28296, MPFR_RNDN);
        mpfr_const_pi(r28302, MPFR_RNDN);
        mpfr_mul(r28303, r28301, r28302, MPFR_RNDN);
        mpfr_mul(r28304, r28300, r28303, MPFR_RNDN);
        mpfr_mul(r28305, r28298, r28304, MPFR_RNDN);
        ;
        mpfr_set_d(r28307, k, MPFR_RNDN);
        mpfr_sub(r28308, r28306, r28307, MPFR_RNDN);
        mpfr_div(r28309, r28308, r28299, MPFR_RNDN);
        mpfr_pow(r28310, r28305, r28309, MPFR_RNDN);
        mpfr_sqrt(r28311, r28307, MPFR_RNDN);
        mpfr_div(r28312, r28310, r28311, MPFR_RNDN);
        return mpfr_get_d(r28312, MPFR_RNDN);
}

static mpfr_t r28313, r28314, r28315, r28316, r28317, r28318, r28319, r28320, r28321, r28322, r28323, r28324, r28325, r28326, r28327, r28328, r28329;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28313);
        mpfr_init(r28314);
        mpfr_init(r28315);
        mpfr_init_set_str(r28316, "2", 10, MPFR_RNDN);
        mpfr_init(r28317);
        mpfr_init(r28318);
        mpfr_init(r28319);
        mpfr_init(r28320);
        mpfr_init(r28321);
        mpfr_init(r28322);
        mpfr_init_set_str(r28323, "1", 10, MPFR_RNDN);
        mpfr_init(r28324);
        mpfr_init(r28325);
        mpfr_init(r28326);
        mpfr_init(r28327);
        mpfr_init(r28328);
        mpfr_init(r28329);
}

double f_dm(double k, double n) {
        mpfr_set_d(r28313, n, MPFR_RNDN);
        mpfr_add(r28314, r28313, r28313, MPFR_RNDN);
        mpfr_sqrt(r28315, r28314, MPFR_RNDN);
        ;
        mpfr_sqrt(r28317, r28316, MPFR_RNDN);
        mpfr_sqrt(r28318, r28313, MPFR_RNDN);
        mpfr_const_pi(r28319, MPFR_RNDN);
        mpfr_mul(r28320, r28318, r28319, MPFR_RNDN);
        mpfr_mul(r28321, r28317, r28320, MPFR_RNDN);
        mpfr_mul(r28322, r28315, r28321, MPFR_RNDN);
        ;
        mpfr_set_d(r28324, k, MPFR_RNDN);
        mpfr_sub(r28325, r28323, r28324, MPFR_RNDN);
        mpfr_div(r28326, r28325, r28316, MPFR_RNDN);
        mpfr_pow(r28327, r28322, r28326, MPFR_RNDN);
        mpfr_sqrt(r28328, r28324, MPFR_RNDN);
        mpfr_div(r28329, r28327, r28328, MPFR_RNDN);
        return mpfr_get_d(r28329, MPFR_RNDN);
}

