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

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

double f_if(float F, float B, float x) {
        float r30461543 = x;
        float r30461544 = 1;
        float r30461545 = B;
        float r30461546 = tan(r30461545);
        float r30461547 = r30461544 / r30461546;
        float r30461548 = r30461543 * r30461547;
        float r30461549 = -r30461548;
        float r30461550 = F;
        float r30461551 = sin(r30461545);
        float r30461552 = r30461550 / r30461551;
        float r30461553 = r30461550 * r30461550;
        float r30461554 = 2;
        float r30461555 = r30461553 + r30461554;
        float r30461556 = r30461554 * r30461543;
        float r30461557 = r30461555 + r30461556;
        float r30461558 = r30461544 / r30461554;
        float r30461559 = -r30461558;
        float r30461560 = pow(r30461557, r30461559);
        float r30461561 = r30461552 * r30461560;
        float r30461562 = r30461549 + r30461561;
        return r30461562;
}

double f_id(double F, double B, double x) {
        double r30461563 = x;
        double r30461564 = 1;
        double r30461565 = B;
        double r30461566 = tan(r30461565);
        double r30461567 = r30461564 / r30461566;
        double r30461568 = r30461563 * r30461567;
        double r30461569 = -r30461568;
        double r30461570 = F;
        double r30461571 = sin(r30461565);
        double r30461572 = r30461570 / r30461571;
        double r30461573 = r30461570 * r30461570;
        double r30461574 = 2;
        double r30461575 = r30461573 + r30461574;
        double r30461576 = r30461574 * r30461563;
        double r30461577 = r30461575 + r30461576;
        double r30461578 = r30461564 / r30461574;
        double r30461579 = -r30461578;
        double r30461580 = pow(r30461577, r30461579);
        double r30461581 = r30461572 * r30461580;
        double r30461582 = r30461569 + r30461581;
        return r30461582;
}


double f_of(float F, float B, float x) {
        float r30461583 = x;
        float r30461584 = -r30461583;
        float r30461585 = B;
        float r30461586 = tan(r30461585);
        float r30461587 = r30461584 / r30461586;
        float r30461588 = r30461583 + r30461583;
        float r30461589 = 2;
        float r30461590 = F;
        float r30461591 = r30461590 * r30461590;
        float r30461592 = r30461589 + r30461591;
        float r30461593 = r30461588 + r30461592;
        float r30461594 = sqrt(r30461593);
        float r30461595 = 1;
        float r30461596 = r30461595 / r30461589;
        float r30461597 = -r30461596;
        float r30461598 = pow(r30461594, r30461597);
        float r30461599 = sin(r30461585);
        float r30461600 = r30461598 / r30461599;
        float r30461601 = r30461595 / r30461590;
        float r30461602 = r30461598 / r30461601;
        float r30461603 = r30461600 * r30461602;
        float r30461604 = r30461587 + r30461603;
        return r30461604;
}

double f_od(double F, double B, double x) {
        double r30461605 = x;
        double r30461606 = -r30461605;
        double r30461607 = B;
        double r30461608 = tan(r30461607);
        double r30461609 = r30461606 / r30461608;
        double r30461610 = r30461605 + r30461605;
        double r30461611 = 2;
        double r30461612 = F;
        double r30461613 = r30461612 * r30461612;
        double r30461614 = r30461611 + r30461613;
        double r30461615 = r30461610 + r30461614;
        double r30461616 = sqrt(r30461615);
        double r30461617 = 1;
        double r30461618 = r30461617 / r30461611;
        double r30461619 = -r30461618;
        double r30461620 = pow(r30461616, r30461619);
        double r30461621 = sin(r30461607);
        double r30461622 = r30461620 / r30461621;
        double r30461623 = r30461617 / r30461612;
        double r30461624 = r30461620 / r30461623;
        double r30461625 = r30461622 * r30461624;
        double r30461626 = r30461609 + r30461625;
        return r30461626;
}

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 r30461627, r30461628, r30461629, r30461630, r30461631, r30461632, r30461633, r30461634, r30461635, r30461636, r30461637, r30461638, r30461639, r30461640, r30461641, r30461642, r30461643, r30461644, r30461645, r30461646;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r30461627);
        mpfr_init_set_str(r30461628, "1", 10, MPFR_RNDN);
        mpfr_init(r30461629);
        mpfr_init(r30461630);
        mpfr_init(r30461631);
        mpfr_init(r30461632);
        mpfr_init(r30461633);
        mpfr_init(r30461634);
        mpfr_init(r30461635);
        mpfr_init(r30461636);
        mpfr_init(r30461637);
        mpfr_init_set_str(r30461638, "2", 10, MPFR_RNDN);
        mpfr_init(r30461639);
        mpfr_init(r30461640);
        mpfr_init(r30461641);
        mpfr_init(r30461642);
        mpfr_init(r30461643);
        mpfr_init(r30461644);
        mpfr_init(r30461645);
        mpfr_init(r30461646);
}

double f_im(double F, double B, double x) {
        mpfr_set_d(r30461627, x, MPFR_RNDN);
        ;
        mpfr_set_d(r30461629, B, MPFR_RNDN);
        mpfr_tan(r30461630, r30461629, MPFR_RNDN);
        mpfr_div(r30461631, r30461628, r30461630, MPFR_RNDN);
        mpfr_mul(r30461632, r30461627, r30461631, MPFR_RNDN);
        mpfr_neg(r30461633, r30461632, MPFR_RNDN);
        mpfr_set_d(r30461634, F, MPFR_RNDN);
        mpfr_sin(r30461635, r30461629, MPFR_RNDN);
        mpfr_div(r30461636, r30461634, r30461635, MPFR_RNDN);
        mpfr_mul(r30461637, r30461634, r30461634, MPFR_RNDN);
        ;
        mpfr_add(r30461639, r30461637, r30461638, MPFR_RNDN);
        mpfr_mul(r30461640, r30461638, r30461627, MPFR_RNDN);
        mpfr_add(r30461641, r30461639, r30461640, MPFR_RNDN);
        mpfr_div(r30461642, r30461628, r30461638, MPFR_RNDN);
        mpfr_neg(r30461643, r30461642, MPFR_RNDN);
        mpfr_pow(r30461644, r30461641, r30461643, MPFR_RNDN);
        mpfr_mul(r30461645, r30461636, r30461644, MPFR_RNDN);
        mpfr_add(r30461646, r30461633, r30461645, MPFR_RNDN);
        return mpfr_get_d(r30461646, MPFR_RNDN);
}

static mpfr_t r30461647, r30461648, r30461649, r30461650, r30461651, r30461652, r30461653, r30461654, r30461655, r30461656, r30461657, r30461658, r30461659, r30461660, r30461661, r30461662, r30461663, r30461664, r30461665, r30461666, r30461667, r30461668;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r30461647);
        mpfr_init(r30461648);
        mpfr_init(r30461649);
        mpfr_init(r30461650);
        mpfr_init(r30461651);
        mpfr_init(r30461652);
        mpfr_init_set_str(r30461653, "2", 10, MPFR_RNDN);
        mpfr_init(r30461654);
        mpfr_init(r30461655);
        mpfr_init(r30461656);
        mpfr_init(r30461657);
        mpfr_init(r30461658);
        mpfr_init_set_str(r30461659, "1", 10, MPFR_RNDN);
        mpfr_init(r30461660);
        mpfr_init(r30461661);
        mpfr_init(r30461662);
        mpfr_init(r30461663);
        mpfr_init(r30461664);
        mpfr_init(r30461665);
        mpfr_init(r30461666);
        mpfr_init(r30461667);
        mpfr_init(r30461668);
}

double f_fm(double F, double B, double x) {
        mpfr_set_d(r30461647, x, MPFR_RNDN);
        mpfr_neg(r30461648, r30461647, MPFR_RNDN);
        mpfr_set_d(r30461649, B, MPFR_RNDN);
        mpfr_tan(r30461650, r30461649, MPFR_RNDN);
        mpfr_div(r30461651, r30461648, r30461650, MPFR_RNDN);
        mpfr_add(r30461652, r30461647, r30461647, MPFR_RNDN);
        ;
        mpfr_set_d(r30461654, F, MPFR_RNDN);
        mpfr_mul(r30461655, r30461654, r30461654, MPFR_RNDN);
        mpfr_add(r30461656, r30461653, r30461655, MPFR_RNDN);
        mpfr_add(r30461657, r30461652, r30461656, MPFR_RNDN);
        mpfr_sqrt(r30461658, r30461657, MPFR_RNDN);
        ;
        mpfr_div(r30461660, r30461659, r30461653, MPFR_RNDN);
        mpfr_neg(r30461661, r30461660, MPFR_RNDN);
        mpfr_pow(r30461662, r30461658, r30461661, MPFR_RNDN);
        mpfr_sin(r30461663, r30461649, MPFR_RNDN);
        mpfr_div(r30461664, r30461662, r30461663, MPFR_RNDN);
        mpfr_div(r30461665, r30461659, r30461654, MPFR_RNDN);
        mpfr_div(r30461666, r30461662, r30461665, MPFR_RNDN);
        mpfr_mul(r30461667, r30461664, r30461666, MPFR_RNDN);
        mpfr_add(r30461668, r30461651, r30461667, MPFR_RNDN);
        return mpfr_get_d(r30461668, MPFR_RNDN);
}

static mpfr_t r30461669, r30461670, r30461671, r30461672, r30461673, r30461674, r30461675, r30461676, r30461677, r30461678, r30461679, r30461680, r30461681, r30461682, r30461683, r30461684, r30461685, r30461686, r30461687, r30461688, r30461689, r30461690;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r30461669);
        mpfr_init(r30461670);
        mpfr_init(r30461671);
        mpfr_init(r30461672);
        mpfr_init(r30461673);
        mpfr_init(r30461674);
        mpfr_init_set_str(r30461675, "2", 10, MPFR_RNDN);
        mpfr_init(r30461676);
        mpfr_init(r30461677);
        mpfr_init(r30461678);
        mpfr_init(r30461679);
        mpfr_init(r30461680);
        mpfr_init_set_str(r30461681, "1", 10, MPFR_RNDN);
        mpfr_init(r30461682);
        mpfr_init(r30461683);
        mpfr_init(r30461684);
        mpfr_init(r30461685);
        mpfr_init(r30461686);
        mpfr_init(r30461687);
        mpfr_init(r30461688);
        mpfr_init(r30461689);
        mpfr_init(r30461690);
}

double f_dm(double F, double B, double x) {
        mpfr_set_d(r30461669, x, MPFR_RNDN);
        mpfr_neg(r30461670, r30461669, MPFR_RNDN);
        mpfr_set_d(r30461671, B, MPFR_RNDN);
        mpfr_tan(r30461672, r30461671, MPFR_RNDN);
        mpfr_div(r30461673, r30461670, r30461672, MPFR_RNDN);
        mpfr_add(r30461674, r30461669, r30461669, MPFR_RNDN);
        ;
        mpfr_set_d(r30461676, F, MPFR_RNDN);
        mpfr_mul(r30461677, r30461676, r30461676, MPFR_RNDN);
        mpfr_add(r30461678, r30461675, r30461677, MPFR_RNDN);
        mpfr_add(r30461679, r30461674, r30461678, MPFR_RNDN);
        mpfr_sqrt(r30461680, r30461679, MPFR_RNDN);
        ;
        mpfr_div(r30461682, r30461681, r30461675, MPFR_RNDN);
        mpfr_neg(r30461683, r30461682, MPFR_RNDN);
        mpfr_pow(r30461684, r30461680, r30461683, MPFR_RNDN);
        mpfr_sin(r30461685, r30461671, MPFR_RNDN);
        mpfr_div(r30461686, r30461684, r30461685, MPFR_RNDN);
        mpfr_div(r30461687, r30461681, r30461676, MPFR_RNDN);
        mpfr_div(r30461688, r30461684, r30461687, MPFR_RNDN);
        mpfr_mul(r30461689, r30461686, r30461688, MPFR_RNDN);
        mpfr_add(r30461690, r30461673, r30461689, MPFR_RNDN);
        return mpfr_get_d(r30461690, MPFR_RNDN);
}

