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

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

double f_if(float l, float Om, float kx, float ky) {
        float r8203 = 1.0f;
        float r8204 = 2.0f;
        float r8205 = r8203 / r8204;
        float r8206 = l;
        float r8207 = r8204 * r8206;
        float r8208 = Om;
        float r8209 = r8207 / r8208;
        float r8210 = pow(r8209, r8204);
        float r8211 = kx;
        float r8212 = sin(r8211);
        float r8213 = pow(r8212, r8204);
        float r8214 = ky;
        float r8215 = sin(r8214);
        float r8216 = pow(r8215, r8204);
        float r8217 = r8213 + r8216;
        float r8218 = r8210 * r8217;
        float r8219 = r8203 + r8218;
        float r8220 = sqrt(r8219);
        float r8221 = r8203 / r8220;
        float r8222 = r8203 + r8221;
        float r8223 = r8205 * r8222;
        float r8224 = sqrt(r8223);
        return r8224;
}

double f_id(double l, double Om, double kx, double ky) {
        double r8225 = 1.0;
        double r8226 = 2.0;
        double r8227 = r8225 / r8226;
        double r8228 = l;
        double r8229 = r8226 * r8228;
        double r8230 = Om;
        double r8231 = r8229 / r8230;
        double r8232 = pow(r8231, r8226);
        double r8233 = kx;
        double r8234 = sin(r8233);
        double r8235 = pow(r8234, r8226);
        double r8236 = ky;
        double r8237 = sin(r8236);
        double r8238 = pow(r8237, r8226);
        double r8239 = r8235 + r8238;
        double r8240 = r8232 * r8239;
        double r8241 = r8225 + r8240;
        double r8242 = sqrt(r8241);
        double r8243 = r8225 / r8242;
        double r8244 = r8225 + r8243;
        double r8245 = r8227 * r8244;
        double r8246 = sqrt(r8245);
        return r8246;
}


double f_of(float l, float Om, float kx, float ky) {
        float r8247 = 1.0f;
        float r8248 = ky;
        float r8249 = sin(r8248);
        float r8250 = 2.0f;
        float r8251 = pow(r8249, r8250);
        float r8252 = kx;
        float r8253 = sin(r8252);
        float r8254 = pow(r8253, r8250);
        float r8255 = r8251 + r8254;
        float r8256 = l;
        float r8257 = r8256 * r8250;
        float r8258 = Om;
        float r8259 = r8257 / r8258;
        float r8260 = r8255 * r8259;
        float r8261 = r8260 * r8259;
        float r8262 = r8261 + r8247;
        float r8263 = sqrt(r8262);
        float r8264 = r8247 / r8263;
        float r8265 = r8264 + r8247;
        float r8266 = r8247 / r8250;
        float r8267 = r8265 * r8266;
        float r8268 = sqrt(r8267);
        return r8268;
}

double f_od(double l, double Om, double kx, double ky) {
        double r8269 = 1.0;
        double r8270 = ky;
        double r8271 = sin(r8270);
        double r8272 = 2.0;
        double r8273 = pow(r8271, r8272);
        double r8274 = kx;
        double r8275 = sin(r8274);
        double r8276 = pow(r8275, r8272);
        double r8277 = r8273 + r8276;
        double r8278 = l;
        double r8279 = r8278 * r8272;
        double r8280 = Om;
        double r8281 = r8279 / r8280;
        double r8282 = r8277 * r8281;
        double r8283 = r8282 * r8281;
        double r8284 = r8283 + r8269;
        double r8285 = sqrt(r8284);
        double r8286 = r8269 / r8285;
        double r8287 = r8286 + r8269;
        double r8288 = r8269 / r8272;
        double r8289 = r8287 * r8288;
        double r8290 = sqrt(r8289);
        return r8290;
}

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 r8291, r8292, r8293, r8294, r8295, r8296, r8297, r8298, r8299, r8300, r8301, r8302, r8303, r8304, r8305, r8306, r8307, r8308, r8309, r8310, r8311, r8312;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8291, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8292, "2", 10, MPFR_RNDN);
        mpfr_init(r8293);
        mpfr_init(r8294);
        mpfr_init(r8295);
        mpfr_init(r8296);
        mpfr_init(r8297);
        mpfr_init(r8298);
        mpfr_init(r8299);
        mpfr_init(r8300);
        mpfr_init(r8301);
        mpfr_init(r8302);
        mpfr_init(r8303);
        mpfr_init(r8304);
        mpfr_init(r8305);
        mpfr_init(r8306);
        mpfr_init(r8307);
        mpfr_init(r8308);
        mpfr_init(r8309);
        mpfr_init(r8310);
        mpfr_init(r8311);
        mpfr_init(r8312);
}

double f_im(double l, double Om, double kx, double ky) {
        ;
        ;
        mpfr_div(r8293, r8291, r8292, MPFR_RNDN);
        mpfr_set_d(r8294, l, MPFR_RNDN);
        mpfr_mul(r8295, r8292, r8294, MPFR_RNDN);
        mpfr_set_d(r8296, Om, MPFR_RNDN);
        mpfr_div(r8297, r8295, r8296, MPFR_RNDN);
        mpfr_pow(r8298, r8297, r8292, MPFR_RNDN);
        mpfr_set_d(r8299, kx, MPFR_RNDN);
        mpfr_sin(r8300, r8299, MPFR_RNDN);
        mpfr_pow(r8301, r8300, r8292, MPFR_RNDN);
        mpfr_set_d(r8302, ky, MPFR_RNDN);
        mpfr_sin(r8303, r8302, MPFR_RNDN);
        mpfr_pow(r8304, r8303, r8292, MPFR_RNDN);
        mpfr_add(r8305, r8301, r8304, MPFR_RNDN);
        mpfr_mul(r8306, r8298, r8305, MPFR_RNDN);
        mpfr_add(r8307, r8291, r8306, MPFR_RNDN);
        mpfr_sqrt(r8308, r8307, MPFR_RNDN);
        mpfr_div(r8309, r8291, r8308, MPFR_RNDN);
        mpfr_add(r8310, r8291, r8309, MPFR_RNDN);
        mpfr_mul(r8311, r8293, r8310, MPFR_RNDN);
        mpfr_sqrt(r8312, r8311, MPFR_RNDN);
        return mpfr_get_d(r8312, MPFR_RNDN);
}

static mpfr_t r8313, r8314, r8315, r8316, r8317, r8318, r8319, r8320, r8321, r8322, r8323, r8324, r8325, r8326, r8327, r8328, r8329, r8330, r8331, r8332, r8333, r8334;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8313, "1", 10, MPFR_RNDN);
        mpfr_init(r8314);
        mpfr_init(r8315);
        mpfr_init_set_str(r8316, "2", 10, MPFR_RNDN);
        mpfr_init(r8317);
        mpfr_init(r8318);
        mpfr_init(r8319);
        mpfr_init(r8320);
        mpfr_init(r8321);
        mpfr_init(r8322);
        mpfr_init(r8323);
        mpfr_init(r8324);
        mpfr_init(r8325);
        mpfr_init(r8326);
        mpfr_init(r8327);
        mpfr_init(r8328);
        mpfr_init(r8329);
        mpfr_init(r8330);
        mpfr_init(r8331);
        mpfr_init(r8332);
        mpfr_init(r8333);
        mpfr_init(r8334);
}

double f_fm(double l, double Om, double kx, double ky) {
        ;
        mpfr_set_d(r8314, ky, MPFR_RNDN);
        mpfr_sin(r8315, r8314, MPFR_RNDN);
        ;
        mpfr_pow(r8317, r8315, r8316, MPFR_RNDN);
        mpfr_set_d(r8318, kx, MPFR_RNDN);
        mpfr_sin(r8319, r8318, MPFR_RNDN);
        mpfr_pow(r8320, r8319, r8316, MPFR_RNDN);
        mpfr_add(r8321, r8317, r8320, MPFR_RNDN);
        mpfr_set_d(r8322, l, MPFR_RNDN);
        mpfr_mul(r8323, r8322, r8316, MPFR_RNDN);
        mpfr_set_d(r8324, Om, MPFR_RNDN);
        mpfr_div(r8325, r8323, r8324, MPFR_RNDN);
        mpfr_mul(r8326, r8321, r8325, MPFR_RNDN);
        mpfr_mul(r8327, r8326, r8325, MPFR_RNDN);
        mpfr_add(r8328, r8327, r8313, MPFR_RNDN);
        mpfr_sqrt(r8329, r8328, MPFR_RNDN);
        mpfr_div(r8330, r8313, r8329, MPFR_RNDN);
        mpfr_add(r8331, r8330, r8313, MPFR_RNDN);
        mpfr_div(r8332, r8313, r8316, MPFR_RNDN);
        mpfr_mul(r8333, r8331, r8332, MPFR_RNDN);
        mpfr_sqrt(r8334, r8333, MPFR_RNDN);
        return mpfr_get_d(r8334, MPFR_RNDN);
}

static mpfr_t r8335, r8336, r8337, r8338, r8339, r8340, r8341, r8342, r8343, r8344, r8345, r8346, r8347, r8348, r8349, r8350, r8351, r8352, r8353, r8354, r8355, r8356;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8335, "1", 10, MPFR_RNDN);
        mpfr_init(r8336);
        mpfr_init(r8337);
        mpfr_init_set_str(r8338, "2", 10, MPFR_RNDN);
        mpfr_init(r8339);
        mpfr_init(r8340);
        mpfr_init(r8341);
        mpfr_init(r8342);
        mpfr_init(r8343);
        mpfr_init(r8344);
        mpfr_init(r8345);
        mpfr_init(r8346);
        mpfr_init(r8347);
        mpfr_init(r8348);
        mpfr_init(r8349);
        mpfr_init(r8350);
        mpfr_init(r8351);
        mpfr_init(r8352);
        mpfr_init(r8353);
        mpfr_init(r8354);
        mpfr_init(r8355);
        mpfr_init(r8356);
}

double f_dm(double l, double Om, double kx, double ky) {
        ;
        mpfr_set_d(r8336, ky, MPFR_RNDN);
        mpfr_sin(r8337, r8336, MPFR_RNDN);
        ;
        mpfr_pow(r8339, r8337, r8338, MPFR_RNDN);
        mpfr_set_d(r8340, kx, MPFR_RNDN);
        mpfr_sin(r8341, r8340, MPFR_RNDN);
        mpfr_pow(r8342, r8341, r8338, MPFR_RNDN);
        mpfr_add(r8343, r8339, r8342, MPFR_RNDN);
        mpfr_set_d(r8344, l, MPFR_RNDN);
        mpfr_mul(r8345, r8344, r8338, MPFR_RNDN);
        mpfr_set_d(r8346, Om, MPFR_RNDN);
        mpfr_div(r8347, r8345, r8346, MPFR_RNDN);
        mpfr_mul(r8348, r8343, r8347, MPFR_RNDN);
        mpfr_mul(r8349, r8348, r8347, MPFR_RNDN);
        mpfr_add(r8350, r8349, r8335, MPFR_RNDN);
        mpfr_sqrt(r8351, r8350, MPFR_RNDN);
        mpfr_div(r8352, r8335, r8351, MPFR_RNDN);
        mpfr_add(r8353, r8352, r8335, MPFR_RNDN);
        mpfr_div(r8354, r8335, r8338, MPFR_RNDN);
        mpfr_mul(r8355, r8353, r8354, MPFR_RNDN);
        mpfr_sqrt(r8356, r8355, MPFR_RNDN);
        return mpfr_get_d(r8356, MPFR_RNDN);
}

