#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 r8125 = ky;
        float r8126 = sin(r8125);
        float r8127 = kx;
        float r8128 = sin(r8127);
        float r8129 = 2.0f;
        float r8130 = pow(r8128, r8129);
        float r8131 = pow(r8126, r8129);
        float r8132 = r8130 + r8131;
        float r8133 = sqrt(r8132);
        float r8134 = r8126 / r8133;
        float r8135 = th;
        float r8136 = sin(r8135);
        float r8137 = r8134 * r8136;
        return r8137;
}

double f_id(double kx, double ky, double th) {
        double r8138 = ky;
        double r8139 = sin(r8138);
        double r8140 = kx;
        double r8141 = sin(r8140);
        double r8142 = 2.0;
        double r8143 = pow(r8141, r8142);
        double r8144 = pow(r8139, r8142);
        double r8145 = r8143 + r8144;
        double r8146 = sqrt(r8145);
        double r8147 = r8139 / r8146;
        double r8148 = th;
        double r8149 = sin(r8148);
        double r8150 = r8147 * r8149;
        return r8150;
}


double f_of(float kx, float ky, float th) {
        float r8151 = th;
        float r8152 = sin(r8151);
        float r8153 = kx;
        float r8154 = sin(r8153);
        float r8155 = ky;
        float r8156 = sin(r8155);
        float r8157 = hypot(r8154, r8156);
        float r8158 = r8157 / r8156;
        float r8159 = r8152 / r8158;
        return r8159;
}

double f_od(double kx, double ky, double th) {
        double r8160 = th;
        double r8161 = sin(r8160);
        double r8162 = kx;
        double r8163 = sin(r8162);
        double r8164 = ky;
        double r8165 = sin(r8164);
        double r8166 = hypot(r8163, r8165);
        double r8167 = r8166 / r8165;
        double r8168 = r8161 / r8167;
        return r8168;
}

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 r8169, r8170, r8171, r8172, r8173, r8174, r8175, r8176, r8177, r8178, r8179, r8180, r8181;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8169);
        mpfr_init(r8170);
        mpfr_init(r8171);
        mpfr_init(r8172);
        mpfr_init_set_str(r8173, "2", 10, MPFR_RNDN);
        mpfr_init(r8174);
        mpfr_init(r8175);
        mpfr_init(r8176);
        mpfr_init(r8177);
        mpfr_init(r8178);
        mpfr_init(r8179);
        mpfr_init(r8180);
        mpfr_init(r8181);
}

double f_im(double kx, double ky, double th) {
        mpfr_set_d(r8169, ky, MPFR_RNDN);
        mpfr_sin(r8170, r8169, MPFR_RNDN);
        mpfr_set_d(r8171, kx, MPFR_RNDN);
        mpfr_sin(r8172, r8171, MPFR_RNDN);
        ;
        mpfr_pow(r8174, r8172, r8173, MPFR_RNDN);
        mpfr_pow(r8175, r8170, r8173, MPFR_RNDN);
        mpfr_add(r8176, r8174, r8175, MPFR_RNDN);
        mpfr_sqrt(r8177, r8176, MPFR_RNDN);
        mpfr_div(r8178, r8170, r8177, MPFR_RNDN);
        mpfr_set_d(r8179, th, MPFR_RNDN);
        mpfr_sin(r8180, r8179, MPFR_RNDN);
        mpfr_mul(r8181, r8178, r8180, MPFR_RNDN);
        return mpfr_get_d(r8181, MPFR_RNDN);
}

static mpfr_t r8182, r8183, r8184, r8185, r8186, r8187, r8188, r8189, r8190;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8182);
        mpfr_init(r8183);
        mpfr_init(r8184);
        mpfr_init(r8185);
        mpfr_init(r8186);
        mpfr_init(r8187);
        mpfr_init(r8188);
        mpfr_init(r8189);
        mpfr_init(r8190);
}

double f_fm(double kx, double ky, double th) {
        mpfr_set_d(r8182, th, MPFR_RNDN);
        mpfr_sin(r8183, r8182, MPFR_RNDN);
        mpfr_set_d(r8184, kx, MPFR_RNDN);
        mpfr_sin(r8185, r8184, MPFR_RNDN);
        mpfr_set_d(r8186, ky, MPFR_RNDN);
        mpfr_sin(r8187, r8186, MPFR_RNDN);
        mpfr_hypot(r8188, r8185, r8187, MPFR_RNDN);
        mpfr_div(r8189, r8188, r8187, MPFR_RNDN);
        mpfr_div(r8190, r8183, r8189, MPFR_RNDN);
        return mpfr_get_d(r8190, MPFR_RNDN);
}

static mpfr_t r8191, r8192, r8193, r8194, r8195, r8196, r8197, r8198, r8199;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8191);
        mpfr_init(r8192);
        mpfr_init(r8193);
        mpfr_init(r8194);
        mpfr_init(r8195);
        mpfr_init(r8196);
        mpfr_init(r8197);
        mpfr_init(r8198);
        mpfr_init(r8199);
}

double f_dm(double kx, double ky, double th) {
        mpfr_set_d(r8191, th, MPFR_RNDN);
        mpfr_sin(r8192, r8191, MPFR_RNDN);
        mpfr_set_d(r8193, kx, MPFR_RNDN);
        mpfr_sin(r8194, r8193, MPFR_RNDN);
        mpfr_set_d(r8195, ky, MPFR_RNDN);
        mpfr_sin(r8196, r8195, MPFR_RNDN);
        mpfr_hypot(r8197, r8194, r8196, MPFR_RNDN);
        mpfr_div(r8198, r8197, r8196, MPFR_RNDN);
        mpfr_div(r8199, r8192, r8198, MPFR_RNDN);
        return mpfr_get_d(r8199, MPFR_RNDN);
}

