#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 r8088 = x;
        float r8089 = 1;
        float r8090 = B;
        float r8091 = tan(r8090);
        float r8092 = r8089 / r8091;
        float r8093 = r8088 * r8092;
        float r8094 = -r8093;
        float r8095 = sin(r8090);
        float r8096 = r8089 / r8095;
        float r8097 = r8094 + r8096;
        return r8097;
}

double f_id(double B, double x) {
        double r8098 = x;
        double r8099 = 1;
        double r8100 = B;
        double r8101 = tan(r8100);
        double r8102 = r8099 / r8101;
        double r8103 = r8098 * r8102;
        double r8104 = -r8103;
        double r8105 = sin(r8100);
        double r8106 = r8099 / r8105;
        double r8107 = r8104 + r8106;
        return r8107;
}


double f_of(float B, float x) {
        float r8108 = 1;
        float r8109 = B;
        float r8110 = sin(r8109);
        float r8111 = r8108 / r8110;
        float r8112 = x;
        float r8113 = r8112 / r8110;
        float r8114 = cos(r8109);
        float r8115 = r8113 * r8114;
        float r8116 = r8111 - r8115;
        return r8116;
}

double f_od(double B, double x) {
        double r8117 = 1;
        double r8118 = B;
        double r8119 = sin(r8118);
        double r8120 = r8117 / r8119;
        double r8121 = x;
        double r8122 = r8121 / r8119;
        double r8123 = cos(r8118);
        double r8124 = r8122 * r8123;
        double r8125 = r8120 - r8124;
        return r8125;
}

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 r8126, r8127, r8128, r8129, r8130, r8131, r8132, r8133, r8134, r8135;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8126);
        mpfr_init_set_str(r8127, "1", 10, MPFR_RNDN);
        mpfr_init(r8128);
        mpfr_init(r8129);
        mpfr_init(r8130);
        mpfr_init(r8131);
        mpfr_init(r8132);
        mpfr_init(r8133);
        mpfr_init(r8134);
        mpfr_init(r8135);
}

double f_im(double B, double x) {
        mpfr_set_d(r8126, x, MPFR_RNDN);
        ;
        mpfr_set_d(r8128, B, MPFR_RNDN);
        mpfr_tan(r8129, r8128, MPFR_RNDN);
        mpfr_div(r8130, r8127, r8129, MPFR_RNDN);
        mpfr_mul(r8131, r8126, r8130, MPFR_RNDN);
        mpfr_neg(r8132, r8131, MPFR_RNDN);
        mpfr_sin(r8133, r8128, MPFR_RNDN);
        mpfr_div(r8134, r8127, r8133, MPFR_RNDN);
        mpfr_add(r8135, r8132, r8134, MPFR_RNDN);
        return mpfr_get_d(r8135, MPFR_RNDN);
}

static mpfr_t r8136, r8137, r8138, r8139, r8140, r8141, r8142, r8143, r8144;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8136, "1", 10, MPFR_RNDN);
        mpfr_init(r8137);
        mpfr_init(r8138);
        mpfr_init(r8139);
        mpfr_init(r8140);
        mpfr_init(r8141);
        mpfr_init(r8142);
        mpfr_init(r8143);
        mpfr_init(r8144);
}

double f_fm(double B, double x) {
        ;
        mpfr_set_d(r8137, B, MPFR_RNDN);
        mpfr_sin(r8138, r8137, MPFR_RNDN);
        mpfr_div(r8139, r8136, r8138, MPFR_RNDN);
        mpfr_set_d(r8140, x, MPFR_RNDN);
        mpfr_div(r8141, r8140, r8138, MPFR_RNDN);
        mpfr_cos(r8142, r8137, MPFR_RNDN);
        mpfr_mul(r8143, r8141, r8142, MPFR_RNDN);
        mpfr_sub(r8144, r8139, r8143, MPFR_RNDN);
        return mpfr_get_d(r8144, MPFR_RNDN);
}

static mpfr_t r8145, r8146, r8147, r8148, r8149, r8150, r8151, r8152, r8153;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8145, "1", 10, MPFR_RNDN);
        mpfr_init(r8146);
        mpfr_init(r8147);
        mpfr_init(r8148);
        mpfr_init(r8149);
        mpfr_init(r8150);
        mpfr_init(r8151);
        mpfr_init(r8152);
        mpfr_init(r8153);
}

double f_dm(double B, double x) {
        ;
        mpfr_set_d(r8146, B, MPFR_RNDN);
        mpfr_sin(r8147, r8146, MPFR_RNDN);
        mpfr_div(r8148, r8145, r8147, MPFR_RNDN);
        mpfr_set_d(r8149, x, MPFR_RNDN);
        mpfr_div(r8150, r8149, r8147, MPFR_RNDN);
        mpfr_cos(r8151, r8146, MPFR_RNDN);
        mpfr_mul(r8152, r8150, r8151, MPFR_RNDN);
        mpfr_sub(r8153, r8148, r8152, MPFR_RNDN);
        return mpfr_get_d(r8153, MPFR_RNDN);
}

