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

char *name = "infinity bug";

double f_if(float a, float x) {
        float r341349 = a;
        float r341350 = x;
        float r341351 = r341349 * r341350;
        float r341352 = exp(r341351);
        float r341353 = sin(r341351);
        float r341354 = r341352 / r341353;
        return r341354;
}

double f_id(double a, double x) {
        double r341355 = a;
        double r341356 = x;
        double r341357 = r341355 * r341356;
        double r341358 = exp(r341357);
        double r341359 = sin(r341357);
        double r341360 = r341358 / r341359;
        return r341360;
}


double f_of(float a, float x) {
        float r341361 = a;
        float r341362 = x;
        float r341363 = r341361 * r341362;
        float r341364 = -inf.0;
        bool r341365 = r341363 <= r341364;
        float r341366 = exp(r341363);
        float r341367 = r341366 / r341361;
        float r341368 = r341367 / r341362;
        float r341369 = sin(r341363);
        float r341370 = r341366 / r341369;
        float r341371 = r341365 ? r341368 : r341370;
        return r341371;
}

double f_od(double a, double x) {
        double r341372 = a;
        double r341373 = x;
        double r341374 = r341372 * r341373;
        double r341375 = -inf.0;
        bool r341376 = r341374 <= r341375;
        double r341377 = exp(r341374);
        double r341378 = r341377 / r341372;
        double r341379 = r341378 / r341373;
        double r341380 = sin(r341374);
        double r341381 = r341377 / r341380;
        double r341382 = r341376 ? r341379 : r341381;
        return r341382;
}

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 r341383, r341384, r341385, r341386, r341387, r341388;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r341383);
        mpfr_init(r341384);
        mpfr_init(r341385);
        mpfr_init(r341386);
        mpfr_init(r341387);
        mpfr_init(r341388);
}

double f_im(double a, double x) {
        mpfr_set_d(r341383, a, MPFR_RNDN);
        mpfr_set_d(r341384, x, MPFR_RNDN);
        mpfr_mul(r341385, r341383, r341384, MPFR_RNDN);
        mpfr_exp(r341386, r341385, MPFR_RNDN);
        mpfr_sin(r341387, r341385, MPFR_RNDN);
        mpfr_div(r341388, r341386, r341387, MPFR_RNDN);
        return mpfr_get_d(r341388, MPFR_RNDN);
}

static mpfr_t r341389, r341390, r341391, r341392, r341393, r341394, r341395, r341396, r341397, r341398, r341399;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r341389);
        mpfr_init(r341390);
        mpfr_init(r341391);
        mpfr_init_set_str(r341392, "-inf.0", 10, MPFR_RNDN);
        mpfr_init(r341393);
        mpfr_init(r341394);
        mpfr_init(r341395);
        mpfr_init(r341396);
        mpfr_init(r341397);
        mpfr_init(r341398);
        mpfr_init(r341399);
}

double f_fm(double a, double x) {
        mpfr_set_d(r341389, a, MPFR_RNDN);
        mpfr_set_d(r341390, x, MPFR_RNDN);
        mpfr_mul(r341391, r341389, r341390, MPFR_RNDN);
        ;
        mpfr_set_si(r341393, mpfr_cmp(r341391, r341392) <= 0, MPFR_RNDN);
        mpfr_exp(r341394, r341391, MPFR_RNDN);
        mpfr_div(r341395, r341394, r341389, MPFR_RNDN);
        mpfr_div(r341396, r341395, r341390, MPFR_RNDN);
        mpfr_sin(r341397, r341391, MPFR_RNDN);
        mpfr_div(r341398, r341394, r341397, MPFR_RNDN);
        if (mpfr_get_si(r341393, MPFR_RNDN)) { mpfr_set(r341399, r341396, MPFR_RNDN); } else { mpfr_set(r341399, r341398, MPFR_RNDN); };
        return mpfr_get_d(r341399, MPFR_RNDN);
}

static mpfr_t r341400, r341401, r341402, r341403, r341404, r341405, r341406, r341407, r341408, r341409, r341410;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r341400);
        mpfr_init(r341401);
        mpfr_init(r341402);
        mpfr_init_set_str(r341403, "-inf.0", 10, MPFR_RNDN);
        mpfr_init(r341404);
        mpfr_init(r341405);
        mpfr_init(r341406);
        mpfr_init(r341407);
        mpfr_init(r341408);
        mpfr_init(r341409);
        mpfr_init(r341410);
}

double f_dm(double a, double x) {
        mpfr_set_d(r341400, a, MPFR_RNDN);
        mpfr_set_d(r341401, x, MPFR_RNDN);
        mpfr_mul(r341402, r341400, r341401, MPFR_RNDN);
        ;
        mpfr_set_si(r341404, mpfr_cmp(r341402, r341403) <= 0, MPFR_RNDN);
        mpfr_exp(r341405, r341402, MPFR_RNDN);
        mpfr_div(r341406, r341405, r341400, MPFR_RNDN);
        mpfr_div(r341407, r341406, r341401, MPFR_RNDN);
        mpfr_sin(r341408, r341402, MPFR_RNDN);
        mpfr_div(r341409, r341405, r341408, MPFR_RNDN);
        if (mpfr_get_si(r341404, MPFR_RNDN)) { mpfr_set(r341410, r341407, MPFR_RNDN); } else { mpfr_set(r341410, r341409, MPFR_RNDN); };
        return mpfr_get_d(r341410, MPFR_RNDN);
}

