#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 r8200 = 1.0f;
        float r8201 = 2.0f;
        float r8202 = r8200 / r8201;
        float r8203 = l;
        float r8204 = r8201 * r8203;
        float r8205 = Om;
        float r8206 = r8204 / r8205;
        float r8207 = pow(r8206, r8201);
        float r8208 = kx;
        float r8209 = sin(r8208);
        float r8210 = pow(r8209, r8201);
        float r8211 = ky;
        float r8212 = sin(r8211);
        float r8213 = pow(r8212, r8201);
        float r8214 = r8210 + r8213;
        float r8215 = r8207 * r8214;
        float r8216 = r8200 + r8215;
        float r8217 = sqrt(r8216);
        float r8218 = r8200 / r8217;
        float r8219 = r8200 + r8218;
        float r8220 = r8202 * r8219;
        float r8221 = sqrt(r8220);
        return r8221;
}

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


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

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

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

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8288, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8289, "2", 10, MPFR_RNDN);
        mpfr_init(r8290);
        mpfr_init(r8291);
        mpfr_init(r8292);
        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);
}

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

static mpfr_t r8310, r8311, r8312, r8313, r8314, r8315, r8316, r8317, r8318, r8319, r8320, r8321, r8322, r8323, r8324, r8325, r8326, r8327, r8328, r8329, r8330, r8331;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8310, "1", 10, MPFR_RNDN);
        mpfr_init(r8311);
        mpfr_init(r8312);
        mpfr_init_set_str(r8313, "2", 10, MPFR_RNDN);
        mpfr_init(r8314);
        mpfr_init(r8315);
        mpfr_init(r8316);
        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);
}

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

static mpfr_t r8332, r8333, r8334, r8335, r8336, r8337, r8338, r8339, r8340, r8341, r8342, r8343, r8344, r8345, r8346, r8347, r8348, r8349, r8350, r8351, r8352, r8353;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8332, "1", 10, MPFR_RNDN);
        mpfr_init(r8333);
        mpfr_init(r8334);
        mpfr_init_set_str(r8335, "2", 10, MPFR_RNDN);
        mpfr_init(r8336);
        mpfr_init(r8337);
        mpfr_init(r8338);
        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);
}

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

