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

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

double f_if(float a1, float a2, float th) {
        float r28267 = th;
        float r28268 = cos(r28267);
        float r28269 = 2;
        float r28270 = sqrt(r28269);
        float r28271 = r28268 / r28270;
        float r28272 = a1;
        float r28273 = r28272 * r28272;
        float r28274 = r28271 * r28273;
        float r28275 = a2;
        float r28276 = r28275 * r28275;
        float r28277 = r28271 * r28276;
        float r28278 = r28274 + r28277;
        return r28278;
}

double f_id(double a1, double a2, double th) {
        double r28279 = th;
        double r28280 = cos(r28279);
        double r28281 = 2;
        double r28282 = sqrt(r28281);
        double r28283 = r28280 / r28282;
        double r28284 = a1;
        double r28285 = r28284 * r28284;
        double r28286 = r28283 * r28285;
        double r28287 = a2;
        double r28288 = r28287 * r28287;
        double r28289 = r28283 * r28288;
        double r28290 = r28286 + r28289;
        return r28290;
}


double f_of(float a1, float a2, float th) {
        float r28291 = th;
        float r28292 = cos(r28291);
        float r28293 = 2;
        float r28294 = sqrt(r28293);
        float r28295 = cbrt(r28294);
        float r28296 = r28295 * r28295;
        float r28297 = r28292 / r28296;
        float r28298 = r28297 / r28295;
        float r28299 = a2;
        float r28300 = r28299 * r28299;
        float r28301 = a1;
        float r28302 = r28301 * r28301;
        float r28303 = r28300 + r28302;
        float r28304 = r28298 * r28303;
        return r28304;
}

double f_od(double a1, double a2, double th) {
        double r28305 = th;
        double r28306 = cos(r28305);
        double r28307 = 2;
        double r28308 = sqrt(r28307);
        double r28309 = cbrt(r28308);
        double r28310 = r28309 * r28309;
        double r28311 = r28306 / r28310;
        double r28312 = r28311 / r28309;
        double r28313 = a2;
        double r28314 = r28313 * r28313;
        double r28315 = a1;
        double r28316 = r28315 * r28315;
        double r28317 = r28314 + r28316;
        double r28318 = r28312 * r28317;
        return r28318;
}

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 r28319, r28320, r28321, r28322, r28323, r28324, r28325, r28326, r28327, r28328, r28329, r28330;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r28319);
        mpfr_init(r28320);
        mpfr_init_set_str(r28321, "2", 10, MPFR_RNDN);
        mpfr_init(r28322);
        mpfr_init(r28323);
        mpfr_init(r28324);
        mpfr_init(r28325);
        mpfr_init(r28326);
        mpfr_init(r28327);
        mpfr_init(r28328);
        mpfr_init(r28329);
        mpfr_init(r28330);
}

double f_im(double a1, double a2, double th) {
        mpfr_set_d(r28319, th, MPFR_RNDN);
        mpfr_cos(r28320, r28319, MPFR_RNDN);
        ;
        mpfr_sqrt(r28322, r28321, MPFR_RNDN);
        mpfr_div(r28323, r28320, r28322, MPFR_RNDN);
        mpfr_set_d(r28324, a1, MPFR_RNDN);
        mpfr_mul(r28325, r28324, r28324, MPFR_RNDN);
        mpfr_mul(r28326, r28323, r28325, MPFR_RNDN);
        mpfr_set_d(r28327, a2, MPFR_RNDN);
        mpfr_mul(r28328, r28327, r28327, MPFR_RNDN);
        mpfr_mul(r28329, r28323, r28328, MPFR_RNDN);
        mpfr_add(r28330, r28326, r28329, MPFR_RNDN);
        return mpfr_get_d(r28330, MPFR_RNDN);
}

static mpfr_t r28331, r28332, r28333, r28334, r28335, r28336, r28337, r28338, r28339, r28340, r28341, r28342, r28343, r28344;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28331);
        mpfr_init(r28332);
        mpfr_init_set_str(r28333, "2", 10, MPFR_RNDN);
        mpfr_init(r28334);
        mpfr_init(r28335);
        mpfr_init(r28336);
        mpfr_init(r28337);
        mpfr_init(r28338);
        mpfr_init(r28339);
        mpfr_init(r28340);
        mpfr_init(r28341);
        mpfr_init(r28342);
        mpfr_init(r28343);
        mpfr_init(r28344);
}

double f_fm(double a1, double a2, double th) {
        mpfr_set_d(r28331, th, MPFR_RNDN);
        mpfr_cos(r28332, r28331, MPFR_RNDN);
        ;
        mpfr_sqrt(r28334, r28333, MPFR_RNDN);
        mpfr_cbrt(r28335, r28334, MPFR_RNDN);
        mpfr_mul(r28336, r28335, r28335, MPFR_RNDN);
        mpfr_div(r28337, r28332, r28336, MPFR_RNDN);
        mpfr_div(r28338, r28337, r28335, MPFR_RNDN);
        mpfr_set_d(r28339, a2, MPFR_RNDN);
        mpfr_mul(r28340, r28339, r28339, MPFR_RNDN);
        mpfr_set_d(r28341, a1, MPFR_RNDN);
        mpfr_mul(r28342, r28341, r28341, MPFR_RNDN);
        mpfr_add(r28343, r28340, r28342, MPFR_RNDN);
        mpfr_mul(r28344, r28338, r28343, MPFR_RNDN);
        return mpfr_get_d(r28344, MPFR_RNDN);
}

static mpfr_t r28345, r28346, r28347, r28348, r28349, r28350, r28351, r28352, r28353, r28354, r28355, r28356, r28357, r28358;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28345);
        mpfr_init(r28346);
        mpfr_init_set_str(r28347, "2", 10, MPFR_RNDN);
        mpfr_init(r28348);
        mpfr_init(r28349);
        mpfr_init(r28350);
        mpfr_init(r28351);
        mpfr_init(r28352);
        mpfr_init(r28353);
        mpfr_init(r28354);
        mpfr_init(r28355);
        mpfr_init(r28356);
        mpfr_init(r28357);
        mpfr_init(r28358);
}

double f_dm(double a1, double a2, double th) {
        mpfr_set_d(r28345, th, MPFR_RNDN);
        mpfr_cos(r28346, r28345, MPFR_RNDN);
        ;
        mpfr_sqrt(r28348, r28347, MPFR_RNDN);
        mpfr_cbrt(r28349, r28348, MPFR_RNDN);
        mpfr_mul(r28350, r28349, r28349, MPFR_RNDN);
        mpfr_div(r28351, r28346, r28350, MPFR_RNDN);
        mpfr_div(r28352, r28351, r28349, MPFR_RNDN);
        mpfr_set_d(r28353, a2, MPFR_RNDN);
        mpfr_mul(r28354, r28353, r28353, MPFR_RNDN);
        mpfr_set_d(r28355, a1, MPFR_RNDN);
        mpfr_mul(r28356, r28355, r28355, MPFR_RNDN);
        mpfr_add(r28357, r28354, r28356, MPFR_RNDN);
        mpfr_mul(r28358, r28352, r28357, MPFR_RNDN);
        return mpfr_get_d(r28358, MPFR_RNDN);
}

