#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 r7876 = x;
        float r7877 = 1;
        float r7878 = B;
        float r7879 = tan(r7878);
        float r7880 = r7877 / r7879;
        float r7881 = r7876 * r7880;
        float r7882 = -r7881;
        float r7883 = sin(r7878);
        float r7884 = r7877 / r7883;
        float r7885 = r7882 + r7884;
        return r7885;
}

double f_id(double B, double x) {
        double r7886 = x;
        double r7887 = 1;
        double r7888 = B;
        double r7889 = tan(r7888);
        double r7890 = r7887 / r7889;
        double r7891 = r7886 * r7890;
        double r7892 = -r7891;
        double r7893 = sin(r7888);
        double r7894 = r7887 / r7893;
        double r7895 = r7892 + r7894;
        return r7895;
}


double f_of(float B, float x) {
        float r7896 = 1;
        float r7897 = B;
        float r7898 = sin(r7897);
        float r7899 = r7896 / r7898;
        float r7900 = x;
        float r7901 = cos(r7897);
        float r7902 = r7900 * r7901;
        float r7903 = r7902 / r7898;
        float r7904 = r7899 - r7903;
        return r7904;
}

double f_od(double B, double x) {
        double r7905 = 1;
        double r7906 = B;
        double r7907 = sin(r7906);
        double r7908 = r7905 / r7907;
        double r7909 = x;
        double r7910 = cos(r7906);
        double r7911 = r7909 * r7910;
        double r7912 = r7911 / r7907;
        double r7913 = r7908 - r7912;
        return r7913;
}

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 r7914, r7915, r7916, r7917, r7918, r7919, r7920, r7921, r7922, r7923;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r7914);
        mpfr_init_set_str(r7915, "1", 10, MPFR_RNDN);
        mpfr_init(r7916);
        mpfr_init(r7917);
        mpfr_init(r7918);
        mpfr_init(r7919);
        mpfr_init(r7920);
        mpfr_init(r7921);
        mpfr_init(r7922);
        mpfr_init(r7923);
}

double f_im(double B, double x) {
        mpfr_set_d(r7914, x, MPFR_RNDN);
        ;
        mpfr_set_d(r7916, B, MPFR_RNDN);
        mpfr_tan(r7917, r7916, MPFR_RNDN);
        mpfr_div(r7918, r7915, r7917, MPFR_RNDN);
        mpfr_mul(r7919, r7914, r7918, MPFR_RNDN);
        mpfr_neg(r7920, r7919, MPFR_RNDN);
        mpfr_sin(r7921, r7916, MPFR_RNDN);
        mpfr_div(r7922, r7915, r7921, MPFR_RNDN);
        mpfr_add(r7923, r7920, r7922, MPFR_RNDN);
        return mpfr_get_d(r7923, MPFR_RNDN);
}

static mpfr_t r7924, r7925, r7926, r7927, r7928, r7929, r7930, r7931, r7932;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r7924, "1", 10, MPFR_RNDN);
        mpfr_init(r7925);
        mpfr_init(r7926);
        mpfr_init(r7927);
        mpfr_init(r7928);
        mpfr_init(r7929);
        mpfr_init(r7930);
        mpfr_init(r7931);
        mpfr_init(r7932);
}

double f_fm(double B, double x) {
        ;
        mpfr_set_d(r7925, B, MPFR_RNDN);
        mpfr_sin(r7926, r7925, MPFR_RNDN);
        mpfr_div(r7927, r7924, r7926, MPFR_RNDN);
        mpfr_set_d(r7928, x, MPFR_RNDN);
        mpfr_cos(r7929, r7925, MPFR_RNDN);
        mpfr_mul(r7930, r7928, r7929, MPFR_RNDN);
        mpfr_div(r7931, r7930, r7926, MPFR_RNDN);
        mpfr_sub(r7932, r7927, r7931, MPFR_RNDN);
        return mpfr_get_d(r7932, MPFR_RNDN);
}

static mpfr_t r7933, r7934, r7935, r7936, r7937, r7938, r7939, r7940, r7941;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r7933, "1", 10, MPFR_RNDN);
        mpfr_init(r7934);
        mpfr_init(r7935);
        mpfr_init(r7936);
        mpfr_init(r7937);
        mpfr_init(r7938);
        mpfr_init(r7939);
        mpfr_init(r7940);
        mpfr_init(r7941);
}

double f_dm(double B, double x) {
        ;
        mpfr_set_d(r7934, B, MPFR_RNDN);
        mpfr_sin(r7935, r7934, MPFR_RNDN);
        mpfr_div(r7936, r7933, r7935, MPFR_RNDN);
        mpfr_set_d(r7937, x, MPFR_RNDN);
        mpfr_cos(r7938, r7934, MPFR_RNDN);
        mpfr_mul(r7939, r7937, r7938, MPFR_RNDN);
        mpfr_div(r7940, r7939, r7935, MPFR_RNDN);
        mpfr_sub(r7941, r7936, r7940, MPFR_RNDN);
        return mpfr_get_d(r7941, MPFR_RNDN);
}

