#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 r8684 = ky;
        float r8685 = sin(r8684);
        float r8686 = kx;
        float r8687 = sin(r8686);
        float r8688 = 2;
        float r8689 = pow(r8687, r8688);
        float r8690 = pow(r8685, r8688);
        float r8691 = r8689 + r8690;
        float r8692 = sqrt(r8691);
        float r8693 = r8685 / r8692;
        float r8694 = th;
        float r8695 = sin(r8694);
        float r8696 = r8693 * r8695;
        return r8696;
}

double f_id(double kx, double ky, double th) {
        double r8697 = ky;
        double r8698 = sin(r8697);
        double r8699 = kx;
        double r8700 = sin(r8699);
        double r8701 = 2;
        double r8702 = pow(r8700, r8701);
        double r8703 = pow(r8698, r8701);
        double r8704 = r8702 + r8703;
        double r8705 = sqrt(r8704);
        double r8706 = r8698 / r8705;
        double r8707 = th;
        double r8708 = sin(r8707);
        double r8709 = r8706 * r8708;
        return r8709;
}


double f_of(float kx, float ky, float th) {
        float r8710 = th;
        float r8711 = sin(r8710);
        float r8712 = ky;
        float r8713 = sin(r8712);
        float r8714 = kx;
        float r8715 = sin(r8714);
        float r8716 = hypot(r8713, r8715);
        float r8717 = r8716 / r8713;
        float r8718 = r8711 / r8717;
        return r8718;
}

double f_od(double kx, double ky, double th) {
        double r8719 = th;
        double r8720 = sin(r8719);
        double r8721 = ky;
        double r8722 = sin(r8721);
        double r8723 = kx;
        double r8724 = sin(r8723);
        double r8725 = hypot(r8722, r8724);
        double r8726 = r8725 / r8722;
        double r8727 = r8720 / r8726;
        return r8727;
}

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 r8728, r8729, r8730, r8731, r8732, r8733, r8734, r8735, r8736, r8737, r8738, r8739, r8740;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8728);
        mpfr_init(r8729);
        mpfr_init(r8730);
        mpfr_init(r8731);
        mpfr_init_set_str(r8732, "2", 10, MPFR_RNDN);
        mpfr_init(r8733);
        mpfr_init(r8734);
        mpfr_init(r8735);
        mpfr_init(r8736);
        mpfr_init(r8737);
        mpfr_init(r8738);
        mpfr_init(r8739);
        mpfr_init(r8740);
}

double f_im(double kx, double ky, double th) {
        mpfr_set_d(r8728, ky, MPFR_RNDN);
        mpfr_sin(r8729, r8728, MPFR_RNDN);
        mpfr_set_d(r8730, kx, MPFR_RNDN);
        mpfr_sin(r8731, r8730, MPFR_RNDN);
        ;
        mpfr_pow(r8733, r8731, r8732, MPFR_RNDN);
        mpfr_pow(r8734, r8729, r8732, MPFR_RNDN);
        mpfr_add(r8735, r8733, r8734, MPFR_RNDN);
        mpfr_sqrt(r8736, r8735, MPFR_RNDN);
        mpfr_div(r8737, r8729, r8736, MPFR_RNDN);
        mpfr_set_d(r8738, th, MPFR_RNDN);
        mpfr_sin(r8739, r8738, MPFR_RNDN);
        mpfr_mul(r8740, r8737, r8739, MPFR_RNDN);
        return mpfr_get_d(r8740, MPFR_RNDN);
}

static mpfr_t r8741, r8742, r8743, r8744, r8745, r8746, r8747, r8748, r8749;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8741);
        mpfr_init(r8742);
        mpfr_init(r8743);
        mpfr_init(r8744);
        mpfr_init(r8745);
        mpfr_init(r8746);
        mpfr_init(r8747);
        mpfr_init(r8748);
        mpfr_init(r8749);
}

double f_fm(double kx, double ky, double th) {
        mpfr_set_d(r8741, th, MPFR_RNDN);
        mpfr_sin(r8742, r8741, MPFR_RNDN);
        mpfr_set_d(r8743, ky, MPFR_RNDN);
        mpfr_sin(r8744, r8743, MPFR_RNDN);
        mpfr_set_d(r8745, kx, MPFR_RNDN);
        mpfr_sin(r8746, r8745, MPFR_RNDN);
        mpfr_hypot(r8747, r8744, r8746, MPFR_RNDN);
        mpfr_div(r8748, r8747, r8744, MPFR_RNDN);
        mpfr_div(r8749, r8742, r8748, MPFR_RNDN);
        return mpfr_get_d(r8749, MPFR_RNDN);
}

static mpfr_t r8750, r8751, r8752, r8753, r8754, r8755, r8756, r8757, r8758;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8750);
        mpfr_init(r8751);
        mpfr_init(r8752);
        mpfr_init(r8753);
        mpfr_init(r8754);
        mpfr_init(r8755);
        mpfr_init(r8756);
        mpfr_init(r8757);
        mpfr_init(r8758);
}

double f_dm(double kx, double ky, double th) {
        mpfr_set_d(r8750, th, MPFR_RNDN);
        mpfr_sin(r8751, r8750, MPFR_RNDN);
        mpfr_set_d(r8752, ky, MPFR_RNDN);
        mpfr_sin(r8753, r8752, MPFR_RNDN);
        mpfr_set_d(r8754, kx, MPFR_RNDN);
        mpfr_sin(r8755, r8754, MPFR_RNDN);
        mpfr_hypot(r8756, r8753, r8755, MPFR_RNDN);
        mpfr_div(r8757, r8756, r8753, MPFR_RNDN);
        mpfr_div(r8758, r8751, r8757, MPFR_RNDN);
        return mpfr_get_d(r8758, MPFR_RNDN);
}

