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

char *name = "Toniolo and Linder, Equation (3b), real";

double f_if(float kx, float ky, float th) {
        float r21304 = ky;
        float r21305 = sin(r21304);
        float r21306 = kx;
        float r21307 = sin(r21306);
        float r21308 = 2;
        float r21309 = pow(r21307, r21308);
        float r21310 = pow(r21305, r21308);
        float r21311 = r21309 + r21310;
        float r21312 = sqrt(r21311);
        float r21313 = r21305 / r21312;
        float r21314 = th;
        float r21315 = sin(r21314);
        float r21316 = r21313 * r21315;
        return r21316;
}

double f_id(double kx, double ky, double th) {
        double r21317 = ky;
        double r21318 = sin(r21317);
        double r21319 = kx;
        double r21320 = sin(r21319);
        double r21321 = 2;
        double r21322 = pow(r21320, r21321);
        double r21323 = pow(r21318, r21321);
        double r21324 = r21322 + r21323;
        double r21325 = sqrt(r21324);
        double r21326 = r21318 / r21325;
        double r21327 = th;
        double r21328 = sin(r21327);
        double r21329 = r21326 * r21328;
        return r21329;
}


double f_of(float kx, float ky, float th) {
        float r21330 = ky;
        float r21331 = sin(r21330);
        float r21332 = kx;
        float r21333 = sin(r21332);
        float r21334 = cbrt(r21333);
        float r21335 = r21333 * r21334;
        float r21336 = 2;
        float r21337 = pow(r21334, r21336);
        float r21338 = r21335 * r21337;
        float r21339 = pow(r21331, r21336);
        float r21340 = r21338 + r21339;
        float r21341 = sqrt(r21340);
        float r21342 = r21331 / r21341;
        float r21343 = th;
        float r21344 = sin(r21343);
        float r21345 = r21342 * r21344;
        return r21345;
}

double f_od(double kx, double ky, double th) {
        double r21346 = ky;
        double r21347 = sin(r21346);
        double r21348 = kx;
        double r21349 = sin(r21348);
        double r21350 = cbrt(r21349);
        double r21351 = r21349 * r21350;
        double r21352 = 2;
        double r21353 = pow(r21350, r21352);
        double r21354 = r21351 * r21353;
        double r21355 = pow(r21347, r21352);
        double r21356 = r21354 + r21355;
        double r21357 = sqrt(r21356);
        double r21358 = r21347 / r21357;
        double r21359 = th;
        double r21360 = sin(r21359);
        double r21361 = r21358 * r21360;
        return r21361;
}

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 r21362, r21363, r21364, r21365, r21366, r21367, r21368, r21369, r21370, r21371, r21372, r21373, r21374;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r21362);
        mpfr_init(r21363);
        mpfr_init(r21364);
        mpfr_init(r21365);
        mpfr_init_set_str(r21366, "2", 10, MPFR_RNDN);
        mpfr_init(r21367);
        mpfr_init(r21368);
        mpfr_init(r21369);
        mpfr_init(r21370);
        mpfr_init(r21371);
        mpfr_init(r21372);
        mpfr_init(r21373);
        mpfr_init(r21374);
}

double f_im(double kx, double ky, double th) {
        mpfr_set_d(r21362, ky, MPFR_RNDN);
        mpfr_sin(r21363, r21362, MPFR_RNDN);
        mpfr_set_d(r21364, kx, MPFR_RNDN);
        mpfr_sin(r21365, r21364, MPFR_RNDN);
        ;
        mpfr_pow(r21367, r21365, r21366, MPFR_RNDN);
        mpfr_pow(r21368, r21363, r21366, MPFR_RNDN);
        mpfr_add(r21369, r21367, r21368, MPFR_RNDN);
        mpfr_sqrt(r21370, r21369, MPFR_RNDN);
        mpfr_div(r21371, r21363, r21370, MPFR_RNDN);
        mpfr_set_d(r21372, th, MPFR_RNDN);
        mpfr_sin(r21373, r21372, MPFR_RNDN);
        mpfr_mul(r21374, r21371, r21373, MPFR_RNDN);
        return mpfr_get_d(r21374, MPFR_RNDN);
}

static mpfr_t r21375, r21376, r21377, r21378, r21379, r21380, r21381, r21382, r21383, r21384, r21385, r21386, r21387, r21388, r21389, r21390;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r21375);
        mpfr_init(r21376);
        mpfr_init(r21377);
        mpfr_init(r21378);
        mpfr_init(r21379);
        mpfr_init(r21380);
        mpfr_init_set_str(r21381, "2", 10, MPFR_RNDN);
        mpfr_init(r21382);
        mpfr_init(r21383);
        mpfr_init(r21384);
        mpfr_init(r21385);
        mpfr_init(r21386);
        mpfr_init(r21387);
        mpfr_init(r21388);
        mpfr_init(r21389);
        mpfr_init(r21390);
}

double f_fm(double kx, double ky, double th) {
        mpfr_set_d(r21375, ky, MPFR_RNDN);
        mpfr_sin(r21376, r21375, MPFR_RNDN);
        mpfr_set_d(r21377, kx, MPFR_RNDN);
        mpfr_sin(r21378, r21377, MPFR_RNDN);
        mpfr_cbrt(r21379, r21378, MPFR_RNDN);
        mpfr_mul(r21380, r21378, r21379, MPFR_RNDN);
        ;
        mpfr_pow(r21382, r21379, r21381, MPFR_RNDN);
        mpfr_mul(r21383, r21380, r21382, MPFR_RNDN);
        mpfr_pow(r21384, r21376, r21381, MPFR_RNDN);
        mpfr_add(r21385, r21383, r21384, MPFR_RNDN);
        mpfr_sqrt(r21386, r21385, MPFR_RNDN);
        mpfr_div(r21387, r21376, r21386, MPFR_RNDN);
        mpfr_set_d(r21388, th, MPFR_RNDN);
        mpfr_sin(r21389, r21388, MPFR_RNDN);
        mpfr_mul(r21390, r21387, r21389, MPFR_RNDN);
        return mpfr_get_d(r21390, MPFR_RNDN);
}

static mpfr_t r21391, r21392, r21393, r21394, r21395, r21396, r21397, r21398, r21399, r21400, r21401, r21402, r21403, r21404, r21405, r21406;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r21391);
        mpfr_init(r21392);
        mpfr_init(r21393);
        mpfr_init(r21394);
        mpfr_init(r21395);
        mpfr_init(r21396);
        mpfr_init_set_str(r21397, "2", 10, MPFR_RNDN);
        mpfr_init(r21398);
        mpfr_init(r21399);
        mpfr_init(r21400);
        mpfr_init(r21401);
        mpfr_init(r21402);
        mpfr_init(r21403);
        mpfr_init(r21404);
        mpfr_init(r21405);
        mpfr_init(r21406);
}

double f_dm(double kx, double ky, double th) {
        mpfr_set_d(r21391, ky, MPFR_RNDN);
        mpfr_sin(r21392, r21391, MPFR_RNDN);
        mpfr_set_d(r21393, kx, MPFR_RNDN);
        mpfr_sin(r21394, r21393, MPFR_RNDN);
        mpfr_cbrt(r21395, r21394, MPFR_RNDN);
        mpfr_mul(r21396, r21394, r21395, MPFR_RNDN);
        ;
        mpfr_pow(r21398, r21395, r21397, MPFR_RNDN);
        mpfr_mul(r21399, r21396, r21398, MPFR_RNDN);
        mpfr_pow(r21400, r21392, r21397, MPFR_RNDN);
        mpfr_add(r21401, r21399, r21400, MPFR_RNDN);
        mpfr_sqrt(r21402, r21401, MPFR_RNDN);
        mpfr_div(r21403, r21392, r21402, MPFR_RNDN);
        mpfr_set_d(r21404, th, MPFR_RNDN);
        mpfr_sin(r21405, r21404, MPFR_RNDN);
        mpfr_mul(r21406, r21403, r21405, MPFR_RNDN);
        return mpfr_get_d(r21406, MPFR_RNDN);
}

