#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 r8588 = ky;
        float r8589 = sin(r8588);
        float r8590 = kx;
        float r8591 = sin(r8590);
        float r8592 = 2;
        float r8593 = pow(r8591, r8592);
        float r8594 = pow(r8589, r8592);
        float r8595 = r8593 + r8594;
        float r8596 = sqrt(r8595);
        float r8597 = r8589 / r8596;
        float r8598 = th;
        float r8599 = sin(r8598);
        float r8600 = r8597 * r8599;
        return r8600;
}

double f_id(double kx, double ky, double th) {
        double r8601 = ky;
        double r8602 = sin(r8601);
        double r8603 = kx;
        double r8604 = sin(r8603);
        double r8605 = 2;
        double r8606 = pow(r8604, r8605);
        double r8607 = pow(r8602, r8605);
        double r8608 = r8606 + r8607;
        double r8609 = sqrt(r8608);
        double r8610 = r8602 / r8609;
        double r8611 = th;
        double r8612 = sin(r8611);
        double r8613 = r8610 * r8612;
        return r8613;
}


double f_of(float kx, float ky, float th) {
        float r8614 = ky;
        float r8615 = sin(r8614);
        float r8616 = 1;
        float r8617 = kx;
        float r8618 = sin(r8617);
        float r8619 = 2;
        float r8620 = pow(r8618, r8619);
        float r8621 = pow(r8615, r8619);
        float r8622 = r8620 + r8621;
        float r8623 = sqrt(r8622);
        float r8624 = r8616 / r8623;
        float r8625 = th;
        float r8626 = sin(r8625);
        float r8627 = r8624 * r8626;
        float r8628 = r8615 * r8627;
        return r8628;
}

double f_od(double kx, double ky, double th) {
        double r8629 = ky;
        double r8630 = sin(r8629);
        double r8631 = 1;
        double r8632 = kx;
        double r8633 = sin(r8632);
        double r8634 = 2;
        double r8635 = pow(r8633, r8634);
        double r8636 = pow(r8630, r8634);
        double r8637 = r8635 + r8636;
        double r8638 = sqrt(r8637);
        double r8639 = r8631 / r8638;
        double r8640 = th;
        double r8641 = sin(r8640);
        double r8642 = r8639 * r8641;
        double r8643 = r8630 * r8642;
        return r8643;
}

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 r8644, r8645, r8646, r8647, r8648, r8649, r8650, r8651, r8652, r8653, r8654, r8655, r8656;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8644);
        mpfr_init(r8645);
        mpfr_init(r8646);
        mpfr_init(r8647);
        mpfr_init_set_str(r8648, "2", 10, MPFR_RNDN);
        mpfr_init(r8649);
        mpfr_init(r8650);
        mpfr_init(r8651);
        mpfr_init(r8652);
        mpfr_init(r8653);
        mpfr_init(r8654);
        mpfr_init(r8655);
        mpfr_init(r8656);
}

double f_im(double kx, double ky, double th) {
        mpfr_set_d(r8644, ky, MPFR_RNDN);
        mpfr_sin(r8645, r8644, MPFR_RNDN);
        mpfr_set_d(r8646, kx, MPFR_RNDN);
        mpfr_sin(r8647, r8646, MPFR_RNDN);
        ;
        mpfr_pow(r8649, r8647, r8648, MPFR_RNDN);
        mpfr_pow(r8650, r8645, r8648, MPFR_RNDN);
        mpfr_add(r8651, r8649, r8650, MPFR_RNDN);
        mpfr_sqrt(r8652, r8651, MPFR_RNDN);
        mpfr_div(r8653, r8645, r8652, MPFR_RNDN);
        mpfr_set_d(r8654, th, MPFR_RNDN);
        mpfr_sin(r8655, r8654, MPFR_RNDN);
        mpfr_mul(r8656, r8653, r8655, MPFR_RNDN);
        return mpfr_get_d(r8656, MPFR_RNDN);
}

static mpfr_t r8657, r8658, r8659, r8660, r8661, r8662, r8663, r8664, r8665, r8666, r8667, r8668, r8669, r8670, r8671;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8657);
        mpfr_init(r8658);
        mpfr_init_set_str(r8659, "1", 10, MPFR_RNDN);
        mpfr_init(r8660);
        mpfr_init(r8661);
        mpfr_init_set_str(r8662, "2", 10, MPFR_RNDN);
        mpfr_init(r8663);
        mpfr_init(r8664);
        mpfr_init(r8665);
        mpfr_init(r8666);
        mpfr_init(r8667);
        mpfr_init(r8668);
        mpfr_init(r8669);
        mpfr_init(r8670);
        mpfr_init(r8671);
}

double f_fm(double kx, double ky, double th) {
        mpfr_set_d(r8657, ky, MPFR_RNDN);
        mpfr_sin(r8658, r8657, MPFR_RNDN);
        ;
        mpfr_set_d(r8660, kx, MPFR_RNDN);
        mpfr_sin(r8661, r8660, MPFR_RNDN);
        ;
        mpfr_pow(r8663, r8661, r8662, MPFR_RNDN);
        mpfr_pow(r8664, r8658, r8662, MPFR_RNDN);
        mpfr_add(r8665, r8663, r8664, MPFR_RNDN);
        mpfr_sqrt(r8666, r8665, MPFR_RNDN);
        mpfr_div(r8667, r8659, r8666, MPFR_RNDN);
        mpfr_set_d(r8668, th, MPFR_RNDN);
        mpfr_sin(r8669, r8668, MPFR_RNDN);
        mpfr_mul(r8670, r8667, r8669, MPFR_RNDN);
        mpfr_mul(r8671, r8658, r8670, MPFR_RNDN);
        return mpfr_get_d(r8671, MPFR_RNDN);
}

static mpfr_t r8672, r8673, r8674, r8675, r8676, r8677, r8678, r8679, r8680, r8681, r8682, r8683, r8684, r8685, r8686;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8672);
        mpfr_init(r8673);
        mpfr_init_set_str(r8674, "1", 10, MPFR_RNDN);
        mpfr_init(r8675);
        mpfr_init(r8676);
        mpfr_init_set_str(r8677, "2", 10, MPFR_RNDN);
        mpfr_init(r8678);
        mpfr_init(r8679);
        mpfr_init(r8680);
        mpfr_init(r8681);
        mpfr_init(r8682);
        mpfr_init(r8683);
        mpfr_init(r8684);
        mpfr_init(r8685);
        mpfr_init(r8686);
}

double f_dm(double kx, double ky, double th) {
        mpfr_set_d(r8672, ky, MPFR_RNDN);
        mpfr_sin(r8673, r8672, MPFR_RNDN);
        ;
        mpfr_set_d(r8675, kx, MPFR_RNDN);
        mpfr_sin(r8676, r8675, MPFR_RNDN);
        ;
        mpfr_pow(r8678, r8676, r8677, MPFR_RNDN);
        mpfr_pow(r8679, r8673, r8677, MPFR_RNDN);
        mpfr_add(r8680, r8678, r8679, MPFR_RNDN);
        mpfr_sqrt(r8681, r8680, MPFR_RNDN);
        mpfr_div(r8682, r8674, r8681, MPFR_RNDN);
        mpfr_set_d(r8683, th, MPFR_RNDN);
        mpfr_sin(r8684, r8683, MPFR_RNDN);
        mpfr_mul(r8685, r8682, r8684, MPFR_RNDN);
        mpfr_mul(r8686, r8673, r8685, MPFR_RNDN);
        return mpfr_get_d(r8686, MPFR_RNDN);
}

