#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 r8151 = ky;
        float r8152 = sin(r8151);
        float r8153 = kx;
        float r8154 = sin(r8153);
        float r8155 = 2.0f;
        float r8156 = pow(r8154, r8155);
        float r8157 = pow(r8152, r8155);
        float r8158 = r8156 + r8157;
        float r8159 = sqrt(r8158);
        float r8160 = r8152 / r8159;
        float r8161 = th;
        float r8162 = sin(r8161);
        float r8163 = r8160 * r8162;
        return r8163;
}

double f_id(double kx, double ky, double th) {
        double r8164 = ky;
        double r8165 = sin(r8164);
        double r8166 = kx;
        double r8167 = sin(r8166);
        double r8168 = 2.0;
        double r8169 = pow(r8167, r8168);
        double r8170 = pow(r8165, r8168);
        double r8171 = r8169 + r8170;
        double r8172 = sqrt(r8171);
        double r8173 = r8165 / r8172;
        double r8174 = th;
        double r8175 = sin(r8174);
        double r8176 = r8173 * r8175;
        return r8176;
}


double f_of(float kx, float ky, float th) {
        float r8177 = th;
        float r8178 = sin(r8177);
        float r8179 = kx;
        float r8180 = sin(r8179);
        float r8181 = ky;
        float r8182 = sin(r8181);
        float r8183 = hypot(r8180, r8182);
        float r8184 = r8183 / r8182;
        float r8185 = r8178 / r8184;
        return r8185;
}

double f_od(double kx, double ky, double th) {
        double r8186 = th;
        double r8187 = sin(r8186);
        double r8188 = kx;
        double r8189 = sin(r8188);
        double r8190 = ky;
        double r8191 = sin(r8190);
        double r8192 = hypot(r8189, r8191);
        double r8193 = r8192 / r8191;
        double r8194 = r8187 / r8193;
        return r8194;
}

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 r8195, r8196, r8197, r8198, r8199, r8200, r8201, r8202, r8203, r8204, r8205, r8206, r8207;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8195);
        mpfr_init(r8196);
        mpfr_init(r8197);
        mpfr_init(r8198);
        mpfr_init_set_str(r8199, "2", 10, MPFR_RNDN);
        mpfr_init(r8200);
        mpfr_init(r8201);
        mpfr_init(r8202);
        mpfr_init(r8203);
        mpfr_init(r8204);
        mpfr_init(r8205);
        mpfr_init(r8206);
        mpfr_init(r8207);
}

double f_im(double kx, double ky, double th) {
        mpfr_set_d(r8195, ky, MPFR_RNDN);
        mpfr_sin(r8196, r8195, MPFR_RNDN);
        mpfr_set_d(r8197, kx, MPFR_RNDN);
        mpfr_sin(r8198, r8197, MPFR_RNDN);
        ;
        mpfr_pow(r8200, r8198, r8199, MPFR_RNDN);
        mpfr_pow(r8201, r8196, r8199, MPFR_RNDN);
        mpfr_add(r8202, r8200, r8201, MPFR_RNDN);
        mpfr_sqrt(r8203, r8202, MPFR_RNDN);
        mpfr_div(r8204, r8196, r8203, MPFR_RNDN);
        mpfr_set_d(r8205, th, MPFR_RNDN);
        mpfr_sin(r8206, r8205, MPFR_RNDN);
        mpfr_mul(r8207, r8204, r8206, MPFR_RNDN);
        return mpfr_get_d(r8207, MPFR_RNDN);
}

static mpfr_t r8208, r8209, r8210, r8211, r8212, r8213, r8214, r8215, r8216;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8208);
        mpfr_init(r8209);
        mpfr_init(r8210);
        mpfr_init(r8211);
        mpfr_init(r8212);
        mpfr_init(r8213);
        mpfr_init(r8214);
        mpfr_init(r8215);
        mpfr_init(r8216);
}

double f_fm(double kx, double ky, double th) {
        mpfr_set_d(r8208, th, MPFR_RNDN);
        mpfr_sin(r8209, r8208, MPFR_RNDN);
        mpfr_set_d(r8210, kx, MPFR_RNDN);
        mpfr_sin(r8211, r8210, MPFR_RNDN);
        mpfr_set_d(r8212, ky, MPFR_RNDN);
        mpfr_sin(r8213, r8212, MPFR_RNDN);
        mpfr_hypot(r8214, r8211, r8213, MPFR_RNDN);
        mpfr_div(r8215, r8214, r8213, MPFR_RNDN);
        mpfr_div(r8216, r8209, r8215, MPFR_RNDN);
        return mpfr_get_d(r8216, MPFR_RNDN);
}

static mpfr_t r8217, r8218, r8219, r8220, r8221, r8222, r8223, r8224, r8225;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8217);
        mpfr_init(r8218);
        mpfr_init(r8219);
        mpfr_init(r8220);
        mpfr_init(r8221);
        mpfr_init(r8222);
        mpfr_init(r8223);
        mpfr_init(r8224);
        mpfr_init(r8225);
}

double f_dm(double kx, double ky, double th) {
        mpfr_set_d(r8217, th, MPFR_RNDN);
        mpfr_sin(r8218, r8217, MPFR_RNDN);
        mpfr_set_d(r8219, kx, MPFR_RNDN);
        mpfr_sin(r8220, r8219, MPFR_RNDN);
        mpfr_set_d(r8221, ky, MPFR_RNDN);
        mpfr_sin(r8222, r8221, MPFR_RNDN);
        mpfr_hypot(r8223, r8220, r8222, MPFR_RNDN);
        mpfr_div(r8224, r8223, r8222, MPFR_RNDN);
        mpfr_div(r8225, r8218, r8224, MPFR_RNDN);
        return mpfr_get_d(r8225, MPFR_RNDN);
}

