#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 r30462149 = ky;
        float r30462150 = sin(r30462149);
        float r30462151 = kx;
        float r30462152 = sin(r30462151);
        float r30462153 = 2;
        float r30462154 = pow(r30462152, r30462153);
        float r30462155 = pow(r30462150, r30462153);
        float r30462156 = r30462154 + r30462155;
        float r30462157 = sqrt(r30462156);
        float r30462158 = r30462150 / r30462157;
        float r30462159 = th;
        float r30462160 = sin(r30462159);
        float r30462161 = r30462158 * r30462160;
        return r30462161;
}

double f_id(double kx, double ky, double th) {
        double r30462162 = ky;
        double r30462163 = sin(r30462162);
        double r30462164 = kx;
        double r30462165 = sin(r30462164);
        double r30462166 = 2;
        double r30462167 = pow(r30462165, r30462166);
        double r30462168 = pow(r30462163, r30462166);
        double r30462169 = r30462167 + r30462168;
        double r30462170 = sqrt(r30462169);
        double r30462171 = r30462163 / r30462170;
        double r30462172 = th;
        double r30462173 = sin(r30462172);
        double r30462174 = r30462171 * r30462173;
        return r30462174;
}


double f_of(float kx, float ky, float th) {
        float r30462175 = ky;
        float r30462176 = sin(r30462175);
        float r30462177 = kx;
        float r30462178 = sin(r30462177);
        float r30462179 = cbrt(r30462178);
        float r30462180 = r30462178 * r30462179;
        float r30462181 = 2;
        float r30462182 = pow(r30462179, r30462181);
        float r30462183 = r30462180 * r30462182;
        float r30462184 = pow(r30462176, r30462181);
        float r30462185 = r30462183 + r30462184;
        float r30462186 = sqrt(r30462185);
        float r30462187 = r30462176 / r30462186;
        float r30462188 = th;
        float r30462189 = sin(r30462188);
        float r30462190 = r30462187 * r30462189;
        return r30462190;
}

double f_od(double kx, double ky, double th) {
        double r30462191 = ky;
        double r30462192 = sin(r30462191);
        double r30462193 = kx;
        double r30462194 = sin(r30462193);
        double r30462195 = cbrt(r30462194);
        double r30462196 = r30462194 * r30462195;
        double r30462197 = 2;
        double r30462198 = pow(r30462195, r30462197);
        double r30462199 = r30462196 * r30462198;
        double r30462200 = pow(r30462192, r30462197);
        double r30462201 = r30462199 + r30462200;
        double r30462202 = sqrt(r30462201);
        double r30462203 = r30462192 / r30462202;
        double r30462204 = th;
        double r30462205 = sin(r30462204);
        double r30462206 = r30462203 * r30462205;
        return r30462206;
}

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 r30462207, r30462208, r30462209, r30462210, r30462211, r30462212, r30462213, r30462214, r30462215, r30462216, r30462217, r30462218, r30462219;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r30462207);
        mpfr_init(r30462208);
        mpfr_init(r30462209);
        mpfr_init(r30462210);
        mpfr_init_set_str(r30462211, "2", 10, MPFR_RNDN);
        mpfr_init(r30462212);
        mpfr_init(r30462213);
        mpfr_init(r30462214);
        mpfr_init(r30462215);
        mpfr_init(r30462216);
        mpfr_init(r30462217);
        mpfr_init(r30462218);
        mpfr_init(r30462219);
}

double f_im(double kx, double ky, double th) {
        mpfr_set_d(r30462207, ky, MPFR_RNDN);
        mpfr_sin(r30462208, r30462207, MPFR_RNDN);
        mpfr_set_d(r30462209, kx, MPFR_RNDN);
        mpfr_sin(r30462210, r30462209, MPFR_RNDN);
        ;
        mpfr_pow(r30462212, r30462210, r30462211, MPFR_RNDN);
        mpfr_pow(r30462213, r30462208, r30462211, MPFR_RNDN);
        mpfr_add(r30462214, r30462212, r30462213, MPFR_RNDN);
        mpfr_sqrt(r30462215, r30462214, MPFR_RNDN);
        mpfr_div(r30462216, r30462208, r30462215, MPFR_RNDN);
        mpfr_set_d(r30462217, th, MPFR_RNDN);
        mpfr_sin(r30462218, r30462217, MPFR_RNDN);
        mpfr_mul(r30462219, r30462216, r30462218, MPFR_RNDN);
        return mpfr_get_d(r30462219, MPFR_RNDN);
}

static mpfr_t r30462220, r30462221, r30462222, r30462223, r30462224, r30462225, r30462226, r30462227, r30462228, r30462229, r30462230, r30462231, r30462232, r30462233, r30462234, r30462235;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r30462220);
        mpfr_init(r30462221);
        mpfr_init(r30462222);
        mpfr_init(r30462223);
        mpfr_init(r30462224);
        mpfr_init(r30462225);
        mpfr_init_set_str(r30462226, "2", 10, MPFR_RNDN);
        mpfr_init(r30462227);
        mpfr_init(r30462228);
        mpfr_init(r30462229);
        mpfr_init(r30462230);
        mpfr_init(r30462231);
        mpfr_init(r30462232);
        mpfr_init(r30462233);
        mpfr_init(r30462234);
        mpfr_init(r30462235);
}

double f_fm(double kx, double ky, double th) {
        mpfr_set_d(r30462220, ky, MPFR_RNDN);
        mpfr_sin(r30462221, r30462220, MPFR_RNDN);
        mpfr_set_d(r30462222, kx, MPFR_RNDN);
        mpfr_sin(r30462223, r30462222, MPFR_RNDN);
        mpfr_cbrt(r30462224, r30462223, MPFR_RNDN);
        mpfr_mul(r30462225, r30462223, r30462224, MPFR_RNDN);
        ;
        mpfr_pow(r30462227, r30462224, r30462226, MPFR_RNDN);
        mpfr_mul(r30462228, r30462225, r30462227, MPFR_RNDN);
        mpfr_pow(r30462229, r30462221, r30462226, MPFR_RNDN);
        mpfr_add(r30462230, r30462228, r30462229, MPFR_RNDN);
        mpfr_sqrt(r30462231, r30462230, MPFR_RNDN);
        mpfr_div(r30462232, r30462221, r30462231, MPFR_RNDN);
        mpfr_set_d(r30462233, th, MPFR_RNDN);
        mpfr_sin(r30462234, r30462233, MPFR_RNDN);
        mpfr_mul(r30462235, r30462232, r30462234, MPFR_RNDN);
        return mpfr_get_d(r30462235, MPFR_RNDN);
}

static mpfr_t r30462236, r30462237, r30462238, r30462239, r30462240, r30462241, r30462242, r30462243, r30462244, r30462245, r30462246, r30462247, r30462248, r30462249, r30462250, r30462251;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r30462236);
        mpfr_init(r30462237);
        mpfr_init(r30462238);
        mpfr_init(r30462239);
        mpfr_init(r30462240);
        mpfr_init(r30462241);
        mpfr_init_set_str(r30462242, "2", 10, MPFR_RNDN);
        mpfr_init(r30462243);
        mpfr_init(r30462244);
        mpfr_init(r30462245);
        mpfr_init(r30462246);
        mpfr_init(r30462247);
        mpfr_init(r30462248);
        mpfr_init(r30462249);
        mpfr_init(r30462250);
        mpfr_init(r30462251);
}

double f_dm(double kx, double ky, double th) {
        mpfr_set_d(r30462236, ky, MPFR_RNDN);
        mpfr_sin(r30462237, r30462236, MPFR_RNDN);
        mpfr_set_d(r30462238, kx, MPFR_RNDN);
        mpfr_sin(r30462239, r30462238, MPFR_RNDN);
        mpfr_cbrt(r30462240, r30462239, MPFR_RNDN);
        mpfr_mul(r30462241, r30462239, r30462240, MPFR_RNDN);
        ;
        mpfr_pow(r30462243, r30462240, r30462242, MPFR_RNDN);
        mpfr_mul(r30462244, r30462241, r30462243, MPFR_RNDN);
        mpfr_pow(r30462245, r30462237, r30462242, MPFR_RNDN);
        mpfr_add(r30462246, r30462244, r30462245, MPFR_RNDN);
        mpfr_sqrt(r30462247, r30462246, MPFR_RNDN);
        mpfr_div(r30462248, r30462237, r30462247, MPFR_RNDN);
        mpfr_set_d(r30462249, th, MPFR_RNDN);
        mpfr_sin(r30462250, r30462249, MPFR_RNDN);
        mpfr_mul(r30462251, r30462248, r30462250, MPFR_RNDN);
        return mpfr_get_d(r30462251, MPFR_RNDN);
}

