#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 r8226 = 1.0f;
        float r8227 = 2.0f;
        float r8228 = r8226 / r8227;
        float r8229 = l;
        float r8230 = r8227 * r8229;
        float r8231 = Om;
        float r8232 = r8230 / r8231;
        float r8233 = pow(r8232, r8227);
        float r8234 = kx;
        float r8235 = sin(r8234);
        float r8236 = pow(r8235, r8227);
        float r8237 = ky;
        float r8238 = sin(r8237);
        float r8239 = pow(r8238, r8227);
        float r8240 = r8236 + r8239;
        float r8241 = r8233 * r8240;
        float r8242 = r8226 + r8241;
        float r8243 = sqrt(r8242);
        float r8244 = r8226 / r8243;
        float r8245 = r8226 + r8244;
        float r8246 = r8228 * r8245;
        float r8247 = sqrt(r8246);
        return r8247;
}

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


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

double f_od(double l, double Om, double kx, double ky) {
        double r8290 = 1.0;
        double r8291 = 2.0;
        double r8292 = r8290 / r8291;
        double r8293 = 4.0;
        double r8294 = kx;
        double r8295 = sin(r8294);
        double r8296 = Om;
        double r8297 = l;
        double r8298 = r8296 / r8297;
        double r8299 = r8295 / r8298;
        double r8300 = ky;
        double r8301 = sin(r8300);
        double r8302 = r8301 / r8298;
        double r8303 = r8302 * r8302;
        double r8304 = fma(r8299, r8299, r8303);
        double r8305 = fma(r8293, r8304, r8290);
        double r8306 = sqrt(r8305);
        double r8307 = r8292 / r8306;
        double r8308 = r8292 + r8307;
        double r8309 = sqrt(r8308);
        return r8309;
}

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 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_im() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8310, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8311, "2", 10, MPFR_RNDN);
        mpfr_init(r8312);
        mpfr_init(r8313);
        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_im(double l, double Om, double kx, double ky) {
        ;
        ;
        mpfr_div(r8312, r8310, r8311, MPFR_RNDN);
        mpfr_set_d(r8313, l, MPFR_RNDN);
        mpfr_mul(r8314, r8311, r8313, MPFR_RNDN);
        mpfr_set_d(r8315, Om, MPFR_RNDN);
        mpfr_div(r8316, r8314, r8315, MPFR_RNDN);
        mpfr_pow(r8317, r8316, r8311, MPFR_RNDN);
        mpfr_set_d(r8318, kx, MPFR_RNDN);
        mpfr_sin(r8319, r8318, MPFR_RNDN);
        mpfr_pow(r8320, r8319, r8311, MPFR_RNDN);
        mpfr_set_d(r8321, ky, MPFR_RNDN);
        mpfr_sin(r8322, r8321, MPFR_RNDN);
        mpfr_pow(r8323, r8322, r8311, MPFR_RNDN);
        mpfr_add(r8324, r8320, r8323, MPFR_RNDN);
        mpfr_mul(r8325, r8317, r8324, MPFR_RNDN);
        mpfr_add(r8326, r8310, r8325, MPFR_RNDN);
        mpfr_sqrt(r8327, r8326, MPFR_RNDN);
        mpfr_div(r8328, r8310, r8327, MPFR_RNDN);
        mpfr_add(r8329, r8310, r8328, MPFR_RNDN);
        mpfr_mul(r8330, r8312, 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;

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

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

static mpfr_t r8352, r8353, r8354, r8355, r8356, r8357, r8358, r8359, r8360, r8361, r8362, r8363, r8364, r8365, r8366, r8367, r8368, r8369, r8370, r8371;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8352, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8353, "2", 10, MPFR_RNDN);
        mpfr_init(r8354);
        mpfr_init_set_str(r8355, "4", 10, MPFR_RNDN);
        mpfr_init(r8356);
        mpfr_init(r8357);
        mpfr_init(r8358);
        mpfr_init(r8359);
        mpfr_init(r8360);
        mpfr_init(r8361);
        mpfr_init(r8362);
        mpfr_init(r8363);
        mpfr_init(r8364);
        mpfr_init(r8365);
        mpfr_init(r8366);
        mpfr_init(r8367);
        mpfr_init(r8368);
        mpfr_init(r8369);
        mpfr_init(r8370);
        mpfr_init(r8371);
}

double f_dm(double l, double Om, double kx, double ky) {
        ;
        ;
        mpfr_div(r8354, r8352, r8353, MPFR_RNDN);
        ;
        mpfr_set_d(r8356, kx, MPFR_RNDN);
        mpfr_sin(r8357, r8356, MPFR_RNDN);
        mpfr_set_d(r8358, Om, MPFR_RNDN);
        mpfr_set_d(r8359, l, MPFR_RNDN);
        mpfr_div(r8360, r8358, r8359, MPFR_RNDN);
        mpfr_div(r8361, r8357, r8360, MPFR_RNDN);
        mpfr_set_d(r8362, ky, MPFR_RNDN);
        mpfr_sin(r8363, r8362, MPFR_RNDN);
        mpfr_div(r8364, r8363, r8360, MPFR_RNDN);
        mpfr_mul(r8365, r8364, r8364, MPFR_RNDN);
        mpfr_fma(r8366, r8361, r8361, r8365, MPFR_RNDN);
        mpfr_fma(r8367, r8355, r8366, r8352, MPFR_RNDN);
        mpfr_sqrt(r8368, r8367, MPFR_RNDN);
        mpfr_div(r8369, r8354, r8368, MPFR_RNDN);
        mpfr_add(r8370, r8354, r8369, MPFR_RNDN);
        mpfr_sqrt(r8371, r8370, MPFR_RNDN);
        return mpfr_get_d(r8371, MPFR_RNDN);
}

