#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 r28208 = th;
        float r28209 = cos(r28208);
        float r28210 = 2;
        float r28211 = sqrt(r28210);
        float r28212 = r28209 / r28211;
        float r28213 = a1;
        float r28214 = r28213 * r28213;
        float r28215 = r28212 * r28214;
        float r28216 = a2;
        float r28217 = r28216 * r28216;
        float r28218 = r28212 * r28217;
        float r28219 = r28215 + r28218;
        return r28219;
}

double f_id(double a1, double a2, double th) {
        double r28220 = th;
        double r28221 = cos(r28220);
        double r28222 = 2;
        double r28223 = sqrt(r28222);
        double r28224 = r28221 / r28223;
        double r28225 = a1;
        double r28226 = r28225 * r28225;
        double r28227 = r28224 * r28226;
        double r28228 = a2;
        double r28229 = r28228 * r28228;
        double r28230 = r28224 * r28229;
        double r28231 = r28227 + r28230;
        return r28231;
}


double f_of(float a1, float a2, float th) {
        float r28232 = th;
        float r28233 = cos(r28232);
        float r28234 = 2;
        float r28235 = sqrt(r28234);
        float r28236 = cbrt(r28235);
        float r28237 = r28236 * r28236;
        float r28238 = r28233 / r28237;
        float r28239 = r28238 / r28236;
        float r28240 = a2;
        float r28241 = r28240 * r28240;
        float r28242 = a1;
        float r28243 = r28242 * r28242;
        float r28244 = r28241 + r28243;
        float r28245 = r28239 * r28244;
        return r28245;
}

double f_od(double a1, double a2, double th) {
        double r28246 = th;
        double r28247 = cos(r28246);
        double r28248 = 2;
        double r28249 = sqrt(r28248);
        double r28250 = cbrt(r28249);
        double r28251 = r28250 * r28250;
        double r28252 = r28247 / r28251;
        double r28253 = r28252 / r28250;
        double r28254 = a2;
        double r28255 = r28254 * r28254;
        double r28256 = a1;
        double r28257 = r28256 * r28256;
        double r28258 = r28255 + r28257;
        double r28259 = r28253 * r28258;
        return r28259;
}

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 r28260, r28261, r28262, r28263, r28264, r28265, r28266, r28267, r28268, r28269, r28270, r28271;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r28260);
        mpfr_init(r28261);
        mpfr_init_set_str(r28262, "2", 10, MPFR_RNDN);
        mpfr_init(r28263);
        mpfr_init(r28264);
        mpfr_init(r28265);
        mpfr_init(r28266);
        mpfr_init(r28267);
        mpfr_init(r28268);
        mpfr_init(r28269);
        mpfr_init(r28270);
        mpfr_init(r28271);
}

double f_im(double a1, double a2, double th) {
        mpfr_set_d(r28260, th, MPFR_RNDN);
        mpfr_cos(r28261, r28260, MPFR_RNDN);
        ;
        mpfr_sqrt(r28263, r28262, MPFR_RNDN);
        mpfr_div(r28264, r28261, r28263, MPFR_RNDN);
        mpfr_set_d(r28265, a1, MPFR_RNDN);
        mpfr_mul(r28266, r28265, r28265, MPFR_RNDN);
        mpfr_mul(r28267, r28264, r28266, MPFR_RNDN);
        mpfr_set_d(r28268, a2, MPFR_RNDN);
        mpfr_mul(r28269, r28268, r28268, MPFR_RNDN);
        mpfr_mul(r28270, r28264, r28269, MPFR_RNDN);
        mpfr_add(r28271, r28267, r28270, MPFR_RNDN);
        return mpfr_get_d(r28271, MPFR_RNDN);
}

static mpfr_t r28272, r28273, r28274, r28275, r28276, r28277, r28278, r28279, r28280, r28281, r28282, r28283, r28284, r28285;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28272);
        mpfr_init(r28273);
        mpfr_init_set_str(r28274, "2", 10, MPFR_RNDN);
        mpfr_init(r28275);
        mpfr_init(r28276);
        mpfr_init(r28277);
        mpfr_init(r28278);
        mpfr_init(r28279);
        mpfr_init(r28280);
        mpfr_init(r28281);
        mpfr_init(r28282);
        mpfr_init(r28283);
        mpfr_init(r28284);
        mpfr_init(r28285);
}

double f_fm(double a1, double a2, double th) {
        mpfr_set_d(r28272, th, MPFR_RNDN);
        mpfr_cos(r28273, r28272, MPFR_RNDN);
        ;
        mpfr_sqrt(r28275, r28274, MPFR_RNDN);
        mpfr_cbrt(r28276, r28275, MPFR_RNDN);
        mpfr_mul(r28277, r28276, r28276, MPFR_RNDN);
        mpfr_div(r28278, r28273, r28277, MPFR_RNDN);
        mpfr_div(r28279, r28278, r28276, MPFR_RNDN);
        mpfr_set_d(r28280, a2, MPFR_RNDN);
        mpfr_mul(r28281, r28280, r28280, MPFR_RNDN);
        mpfr_set_d(r28282, a1, MPFR_RNDN);
        mpfr_mul(r28283, r28282, r28282, MPFR_RNDN);
        mpfr_add(r28284, r28281, r28283, MPFR_RNDN);
        mpfr_mul(r28285, r28279, r28284, MPFR_RNDN);
        return mpfr_get_d(r28285, MPFR_RNDN);
}

static mpfr_t r28286, r28287, r28288, r28289, r28290, r28291, r28292, r28293, r28294, r28295, r28296, r28297, r28298, r28299;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28286);
        mpfr_init(r28287);
        mpfr_init_set_str(r28288, "2", 10, MPFR_RNDN);
        mpfr_init(r28289);
        mpfr_init(r28290);
        mpfr_init(r28291);
        mpfr_init(r28292);
        mpfr_init(r28293);
        mpfr_init(r28294);
        mpfr_init(r28295);
        mpfr_init(r28296);
        mpfr_init(r28297);
        mpfr_init(r28298);
        mpfr_init(r28299);
}

double f_dm(double a1, double a2, double th) {
        mpfr_set_d(r28286, th, MPFR_RNDN);
        mpfr_cos(r28287, r28286, MPFR_RNDN);
        ;
        mpfr_sqrt(r28289, r28288, MPFR_RNDN);
        mpfr_cbrt(r28290, r28289, MPFR_RNDN);
        mpfr_mul(r28291, r28290, r28290, MPFR_RNDN);
        mpfr_div(r28292, r28287, r28291, MPFR_RNDN);
        mpfr_div(r28293, r28292, r28290, MPFR_RNDN);
        mpfr_set_d(r28294, a2, MPFR_RNDN);
        mpfr_mul(r28295, r28294, r28294, MPFR_RNDN);
        mpfr_set_d(r28296, a1, MPFR_RNDN);
        mpfr_mul(r28297, r28296, r28296, MPFR_RNDN);
        mpfr_add(r28298, r28295, r28297, MPFR_RNDN);
        mpfr_mul(r28299, r28293, r28298, MPFR_RNDN);
        return mpfr_get_d(r28299, MPFR_RNDN);
}

