#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 r9105 = x;
        float r9106 = 1;
        float r9107 = B;
        float r9108 = tan(r9107);
        float r9109 = r9106 / r9108;
        float r9110 = r9105 * r9109;
        float r9111 = -r9110;
        float r9112 = sin(r9107);
        float r9113 = r9106 / r9112;
        float r9114 = r9111 + r9113;
        return r9114;
}

double f_id(double B, double x) {
        double r9115 = x;
        double r9116 = 1;
        double r9117 = B;
        double r9118 = tan(r9117);
        double r9119 = r9116 / r9118;
        double r9120 = r9115 * r9119;
        double r9121 = -r9120;
        double r9122 = sin(r9117);
        double r9123 = r9116 / r9122;
        double r9124 = r9121 + r9123;
        return r9124;
}


double f_of(float B, float x) {
        float r9125 = 1;
        float r9126 = B;
        float r9127 = sin(r9126);
        float r9128 = r9125 / r9127;
        float r9129 = x;
        float r9130 = r9129 / r9127;
        float r9131 = cos(r9126);
        float r9132 = r9130 * r9131;
        float r9133 = r9128 - r9132;
        return r9133;
}

double f_od(double B, double x) {
        double r9134 = 1;
        double r9135 = B;
        double r9136 = sin(r9135);
        double r9137 = r9134 / r9136;
        double r9138 = x;
        double r9139 = r9138 / r9136;
        double r9140 = cos(r9135);
        double r9141 = r9139 * r9140;
        double r9142 = r9137 - r9141;
        return r9142;
}

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 r9143, r9144, r9145, r9146, r9147, r9148, r9149, r9150, r9151, r9152;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9143);
        mpfr_init_set_str(r9144, "1", 10, MPFR_RNDN);
        mpfr_init(r9145);
        mpfr_init(r9146);
        mpfr_init(r9147);
        mpfr_init(r9148);
        mpfr_init(r9149);
        mpfr_init(r9150);
        mpfr_init(r9151);
        mpfr_init(r9152);
}

double f_im(double B, double x) {
        mpfr_set_d(r9143, x, MPFR_RNDN);
        ;
        mpfr_set_d(r9145, B, MPFR_RNDN);
        mpfr_tan(r9146, r9145, MPFR_RNDN);
        mpfr_div(r9147, r9144, r9146, MPFR_RNDN);
        mpfr_mul(r9148, r9143, r9147, MPFR_RNDN);
        mpfr_neg(r9149, r9148, MPFR_RNDN);
        mpfr_sin(r9150, r9145, MPFR_RNDN);
        mpfr_div(r9151, r9144, r9150, MPFR_RNDN);
        mpfr_add(r9152, r9149, r9151, MPFR_RNDN);
        return mpfr_get_d(r9152, MPFR_RNDN);
}

static mpfr_t r9153, r9154, r9155, r9156, r9157, r9158, r9159, r9160, r9161;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r9153, "1", 10, MPFR_RNDN);
        mpfr_init(r9154);
        mpfr_init(r9155);
        mpfr_init(r9156);
        mpfr_init(r9157);
        mpfr_init(r9158);
        mpfr_init(r9159);
        mpfr_init(r9160);
        mpfr_init(r9161);
}

double f_fm(double B, double x) {
        ;
        mpfr_set_d(r9154, B, MPFR_RNDN);
        mpfr_sin(r9155, r9154, MPFR_RNDN);
        mpfr_div(r9156, r9153, r9155, MPFR_RNDN);
        mpfr_set_d(r9157, x, MPFR_RNDN);
        mpfr_div(r9158, r9157, r9155, MPFR_RNDN);
        mpfr_cos(r9159, r9154, MPFR_RNDN);
        mpfr_mul(r9160, r9158, r9159, MPFR_RNDN);
        mpfr_sub(r9161, r9156, r9160, MPFR_RNDN);
        return mpfr_get_d(r9161, MPFR_RNDN);
}

static mpfr_t r9162, r9163, r9164, r9165, r9166, r9167, r9168, r9169, r9170;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r9162, "1", 10, MPFR_RNDN);
        mpfr_init(r9163);
        mpfr_init(r9164);
        mpfr_init(r9165);
        mpfr_init(r9166);
        mpfr_init(r9167);
        mpfr_init(r9168);
        mpfr_init(r9169);
        mpfr_init(r9170);
}

double f_dm(double B, double x) {
        ;
        mpfr_set_d(r9163, B, MPFR_RNDN);
        mpfr_sin(r9164, r9163, MPFR_RNDN);
        mpfr_div(r9165, r9162, r9164, MPFR_RNDN);
        mpfr_set_d(r9166, x, MPFR_RNDN);
        mpfr_div(r9167, r9166, r9164, MPFR_RNDN);
        mpfr_cos(r9168, r9163, MPFR_RNDN);
        mpfr_mul(r9169, r9167, r9168, MPFR_RNDN);
        mpfr_sub(r9170, r9165, r9169, MPFR_RNDN);
        return mpfr_get_d(r9170, MPFR_RNDN);
}

