#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "VandenBroeck and Keller, Equation (24)";

double f_if(float B, float x) {
        float r8510 = x;
        float r8511 = 1.0f;
        float r8512 = B;
        float r8513 = tan(r8512);
        float r8514 = r8511 / r8513;
        float r8515 = r8510 * r8514;
        float r8516 = -r8515;
        float r8517 = sin(r8512);
        float r8518 = r8511 / r8517;
        float r8519 = r8516 + r8518;
        return r8519;
}

double f_id(double B, double x) {
        double r8520 = x;
        double r8521 = 1.0;
        double r8522 = B;
        double r8523 = tan(r8522);
        double r8524 = r8521 / r8523;
        double r8525 = r8520 * r8524;
        double r8526 = -r8525;
        double r8527 = sin(r8522);
        double r8528 = r8521 / r8527;
        double r8529 = r8526 + r8528;
        return r8529;
}


double f_of(float B, float x) {
        float r8530 = 1.0f;
        float r8531 = B;
        float r8532 = sin(r8531);
        float r8533 = r8530 / r8532;
        float r8534 = tan(r8531);
        float r8535 = x;
        float r8536 = r8534 / r8535;
        float r8537 = r8530 / r8536;
        float r8538 = r8533 - r8537;
        return r8538;
}

double f_od(double B, double x) {
        double r8539 = 1.0;
        double r8540 = B;
        double r8541 = sin(r8540);
        double r8542 = r8539 / r8541;
        double r8543 = tan(r8540);
        double r8544 = x;
        double r8545 = r8543 / r8544;
        double r8546 = r8539 / r8545;
        double r8547 = r8542 - r8546;
        return r8547;
}

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 r8548, r8549, r8550, r8551, r8552, r8553, r8554, r8555, r8556, r8557;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8548);
        mpfr_init_set_str(r8549, "1", 10, MPFR_RNDN);
        mpfr_init(r8550);
        mpfr_init(r8551);
        mpfr_init(r8552);
        mpfr_init(r8553);
        mpfr_init(r8554);
        mpfr_init(r8555);
        mpfr_init(r8556);
        mpfr_init(r8557);
}

double f_im(double B, double x) {
        mpfr_set_d(r8548, x, MPFR_RNDN);
        ;
        mpfr_set_d(r8550, B, MPFR_RNDN);
        mpfr_tan(r8551, r8550, MPFR_RNDN);
        mpfr_div(r8552, r8549, r8551, MPFR_RNDN);
        mpfr_mul(r8553, r8548, r8552, MPFR_RNDN);
        mpfr_neg(r8554, r8553, MPFR_RNDN);
        mpfr_sin(r8555, r8550, MPFR_RNDN);
        mpfr_div(r8556, r8549, r8555, MPFR_RNDN);
        mpfr_add(r8557, r8554, r8556, MPFR_RNDN);
        return mpfr_get_d(r8557, MPFR_RNDN);
}

static mpfr_t r8558, r8559, r8560, r8561, r8562, r8563, r8564, r8565, r8566;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8558, "1", 10, MPFR_RNDN);
        mpfr_init(r8559);
        mpfr_init(r8560);
        mpfr_init(r8561);
        mpfr_init(r8562);
        mpfr_init(r8563);
        mpfr_init(r8564);
        mpfr_init(r8565);
        mpfr_init(r8566);
}

double f_fm(double B, double x) {
        ;
        mpfr_set_d(r8559, B, MPFR_RNDN);
        mpfr_sin(r8560, r8559, MPFR_RNDN);
        mpfr_div(r8561, r8558, r8560, MPFR_RNDN);
        mpfr_tan(r8562, r8559, MPFR_RNDN);
        mpfr_set_d(r8563, x, MPFR_RNDN);
        mpfr_div(r8564, r8562, r8563, MPFR_RNDN);
        mpfr_div(r8565, r8558, r8564, MPFR_RNDN);
        mpfr_sub(r8566, r8561, r8565, MPFR_RNDN);
        return mpfr_get_d(r8566, MPFR_RNDN);
}

static mpfr_t r8567, r8568, r8569, r8570, r8571, r8572, r8573, r8574, r8575;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8567, "1", 10, MPFR_RNDN);
        mpfr_init(r8568);
        mpfr_init(r8569);
        mpfr_init(r8570);
        mpfr_init(r8571);
        mpfr_init(r8572);
        mpfr_init(r8573);
        mpfr_init(r8574);
        mpfr_init(r8575);
}

double f_dm(double B, double x) {
        ;
        mpfr_set_d(r8568, B, MPFR_RNDN);
        mpfr_sin(r8569, r8568, MPFR_RNDN);
        mpfr_div(r8570, r8567, r8569, MPFR_RNDN);
        mpfr_tan(r8571, r8568, MPFR_RNDN);
        mpfr_set_d(r8572, x, MPFR_RNDN);
        mpfr_div(r8573, r8571, r8572, MPFR_RNDN);
        mpfr_div(r8574, r8567, r8573, MPFR_RNDN);
        mpfr_sub(r8575, r8570, r8574, MPFR_RNDN);
        return mpfr_get_d(r8575, MPFR_RNDN);
}

