#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 r8522 = x;
        float r8523 = 1.0f;
        float r8524 = B;
        float r8525 = tan(r8524);
        float r8526 = r8523 / r8525;
        float r8527 = r8522 * r8526;
        float r8528 = -r8527;
        float r8529 = sin(r8524);
        float r8530 = r8523 / r8529;
        float r8531 = r8528 + r8530;
        return r8531;
}

double f_id(double B, double x) {
        double r8532 = x;
        double r8533 = 1.0;
        double r8534 = B;
        double r8535 = tan(r8534);
        double r8536 = r8533 / r8535;
        double r8537 = r8532 * r8536;
        double r8538 = -r8537;
        double r8539 = sin(r8534);
        double r8540 = r8533 / r8539;
        double r8541 = r8538 + r8540;
        return r8541;
}


double f_of(float B, float x) {
        float r8542 = 1.0f;
        float r8543 = B;
        float r8544 = sin(r8543);
        float r8545 = r8542 / r8544;
        float r8546 = tan(r8543);
        float r8547 = x;
        float r8548 = r8546 / r8547;
        float r8549 = r8542 / r8548;
        float r8550 = r8545 - r8549;
        return r8550;
}

double f_od(double B, double x) {
        double r8551 = 1.0;
        double r8552 = B;
        double r8553 = sin(r8552);
        double r8554 = r8551 / r8553;
        double r8555 = tan(r8552);
        double r8556 = x;
        double r8557 = r8555 / r8556;
        double r8558 = r8551 / r8557;
        double r8559 = r8554 - r8558;
        return r8559;
}

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 r8560, r8561, r8562, r8563, r8564, r8565, r8566, r8567, r8568, r8569;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8560);
        mpfr_init_set_str(r8561, "1", 10, MPFR_RNDN);
        mpfr_init(r8562);
        mpfr_init(r8563);
        mpfr_init(r8564);
        mpfr_init(r8565);
        mpfr_init(r8566);
        mpfr_init(r8567);
        mpfr_init(r8568);
        mpfr_init(r8569);
}

double f_im(double B, double x) {
        mpfr_set_d(r8560, x, MPFR_RNDN);
        ;
        mpfr_set_d(r8562, B, MPFR_RNDN);
        mpfr_tan(r8563, r8562, MPFR_RNDN);
        mpfr_div(r8564, r8561, r8563, MPFR_RNDN);
        mpfr_mul(r8565, r8560, r8564, MPFR_RNDN);
        mpfr_neg(r8566, r8565, MPFR_RNDN);
        mpfr_sin(r8567, r8562, MPFR_RNDN);
        mpfr_div(r8568, r8561, r8567, MPFR_RNDN);
        mpfr_add(r8569, r8566, r8568, MPFR_RNDN);
        return mpfr_get_d(r8569, MPFR_RNDN);
}

static mpfr_t r8570, r8571, r8572, r8573, r8574, r8575, r8576, r8577, r8578;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8570, "1", 10, MPFR_RNDN);
        mpfr_init(r8571);
        mpfr_init(r8572);
        mpfr_init(r8573);
        mpfr_init(r8574);
        mpfr_init(r8575);
        mpfr_init(r8576);
        mpfr_init(r8577);
        mpfr_init(r8578);
}

double f_fm(double B, double x) {
        ;
        mpfr_set_d(r8571, B, MPFR_RNDN);
        mpfr_sin(r8572, r8571, MPFR_RNDN);
        mpfr_div(r8573, r8570, r8572, MPFR_RNDN);
        mpfr_tan(r8574, r8571, MPFR_RNDN);
        mpfr_set_d(r8575, x, MPFR_RNDN);
        mpfr_div(r8576, r8574, r8575, MPFR_RNDN);
        mpfr_div(r8577, r8570, r8576, MPFR_RNDN);
        mpfr_sub(r8578, r8573, r8577, MPFR_RNDN);
        return mpfr_get_d(r8578, MPFR_RNDN);
}

static mpfr_t r8579, r8580, r8581, r8582, r8583, r8584, r8585, r8586, r8587;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8579, "1", 10, MPFR_RNDN);
        mpfr_init(r8580);
        mpfr_init(r8581);
        mpfr_init(r8582);
        mpfr_init(r8583);
        mpfr_init(r8584);
        mpfr_init(r8585);
        mpfr_init(r8586);
        mpfr_init(r8587);
}

double f_dm(double B, double x) {
        ;
        mpfr_set_d(r8580, B, MPFR_RNDN);
        mpfr_sin(r8581, r8580, MPFR_RNDN);
        mpfr_div(r8582, r8579, r8581, MPFR_RNDN);
        mpfr_tan(r8583, r8580, MPFR_RNDN);
        mpfr_set_d(r8584, x, MPFR_RNDN);
        mpfr_div(r8585, r8583, r8584, MPFR_RNDN);
        mpfr_div(r8586, r8579, r8585, MPFR_RNDN);
        mpfr_sub(r8587, r8582, r8586, MPFR_RNDN);
        return mpfr_get_d(r8587, MPFR_RNDN);
}

