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

char *name = "Asymptote C";

double f_if(float x) {
        float r10487 = x;
        float r10488 = 1;
        float r10489 = r10487 + r10488;
        float r10490 = r10487 / r10489;
        float r10491 = r10487 - r10488;
        float r10492 = r10489 / r10491;
        float r10493 = r10490 - r10492;
        return r10493;
}

double f_id(double x) {
        double r10494 = x;
        double r10495 = 1;
        double r10496 = r10494 + r10495;
        double r10497 = r10494 / r10496;
        double r10498 = r10494 - r10495;
        double r10499 = r10496 / r10498;
        double r10500 = r10497 - r10499;
        return r10500;
}


double f_of(float x) {
        float r10501 = x;
        float r10502 = 1;
        float r10503 = r10501 + r10502;
        float r10504 = r10501 / r10503;
        float r10505 = r10501 - r10502;
        float r10506 = r10503 / r10505;
        float r10507 = r10504 - r10506;
        float r10508 = 7.416016917401288e-06;
        bool r10509 = r10507 <= r10508;
        float r10510 = 3;
        float r10511 = -r10510;
        float r10512 = r10511 / r10501;
        float r10513 = r10510 / r10501;
        float r10514 = r10502 + r10513;
        float r10515 = r10501 * r10501;
        float r10516 = r10514 / r10515;
        float r10517 = r10512 - r10516;
        float r10518 = log(r10507);
        float r10519 = exp(r10518);
        float r10520 = r10509 ? r10517 : r10519;
        return r10520;
}

double f_od(double x) {
        double r10521 = x;
        double r10522 = 1;
        double r10523 = r10521 + r10522;
        double r10524 = r10521 / r10523;
        double r10525 = r10521 - r10522;
        double r10526 = r10523 / r10525;
        double r10527 = r10524 - r10526;
        double r10528 = 7.416016917401288e-06;
        bool r10529 = r10527 <= r10528;
        double r10530 = 3;
        double r10531 = -r10530;
        double r10532 = r10531 / r10521;
        double r10533 = r10530 / r10521;
        double r10534 = r10522 + r10533;
        double r10535 = r10521 * r10521;
        double r10536 = r10534 / r10535;
        double r10537 = r10532 - r10536;
        double r10538 = log(r10527);
        double r10539 = exp(r10538);
        double r10540 = r10529 ? r10537 : r10539;
        return r10540;
}

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 r10541, r10542, r10543, r10544, r10545, r10546, r10547;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10541);
        mpfr_init_set_str(r10542, "1", 10, MPFR_RNDN);
        mpfr_init(r10543);
        mpfr_init(r10544);
        mpfr_init(r10545);
        mpfr_init(r10546);
        mpfr_init(r10547);
}

double f_im(double x) {
        mpfr_set_d(r10541, x, MPFR_RNDN);
        ;
        mpfr_add(r10543, r10541, r10542, MPFR_RNDN);
        mpfr_div(r10544, r10541, r10543, MPFR_RNDN);
        mpfr_sub(r10545, r10541, r10542, MPFR_RNDN);
        mpfr_div(r10546, r10543, r10545, MPFR_RNDN);
        mpfr_sub(r10547, r10544, r10546, MPFR_RNDN);
        return mpfr_get_d(r10547, MPFR_RNDN);
}

static mpfr_t r10548, r10549, r10550, r10551, r10552, r10553, r10554, r10555, r10556, r10557, r10558, r10559, r10560, r10561, r10562, r10563, r10564, r10565, r10566, r10567;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10548);
        mpfr_init_set_str(r10549, "1", 10, MPFR_RNDN);
        mpfr_init(r10550);
        mpfr_init(r10551);
        mpfr_init(r10552);
        mpfr_init(r10553);
        mpfr_init(r10554);
        mpfr_init_set_str(r10555, "7.416016917401288e-06", 10, MPFR_RNDN);
        mpfr_init(r10556);
        mpfr_init_set_str(r10557, "3", 10, MPFR_RNDN);
        mpfr_init(r10558);
        mpfr_init(r10559);
        mpfr_init(r10560);
        mpfr_init(r10561);
        mpfr_init(r10562);
        mpfr_init(r10563);
        mpfr_init(r10564);
        mpfr_init(r10565);
        mpfr_init(r10566);
        mpfr_init(r10567);
}

double f_fm(double x) {
        mpfr_set_d(r10548, x, MPFR_RNDN);
        ;
        mpfr_add(r10550, r10548, r10549, MPFR_RNDN);
        mpfr_div(r10551, r10548, r10550, MPFR_RNDN);
        mpfr_sub(r10552, r10548, r10549, MPFR_RNDN);
        mpfr_div(r10553, r10550, r10552, MPFR_RNDN);
        mpfr_sub(r10554, r10551, r10553, MPFR_RNDN);
        ;
        mpfr_set_si(r10556, mpfr_cmp(r10554, r10555) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r10558, r10557, MPFR_RNDN);
        mpfr_div(r10559, r10558, r10548, MPFR_RNDN);
        mpfr_div(r10560, r10557, r10548, MPFR_RNDN);
        mpfr_add(r10561, r10549, r10560, MPFR_RNDN);
        mpfr_mul(r10562, r10548, r10548, MPFR_RNDN);
        mpfr_div(r10563, r10561, r10562, MPFR_RNDN);
        mpfr_sub(r10564, r10559, r10563, MPFR_RNDN);
        mpfr_log(r10565, r10554, MPFR_RNDN);
        mpfr_exp(r10566, r10565, MPFR_RNDN);
        if (mpfr_get_si(r10556, MPFR_RNDN)) { mpfr_set(r10567, r10564, MPFR_RNDN); } else { mpfr_set(r10567, r10566, MPFR_RNDN); };
        return mpfr_get_d(r10567, MPFR_RNDN);
}

static mpfr_t r10568, r10569, r10570, r10571, r10572, r10573, r10574, r10575, r10576, r10577, r10578, r10579, r10580, r10581, r10582, r10583, r10584, r10585, r10586, r10587;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10568);
        mpfr_init_set_str(r10569, "1", 10, MPFR_RNDN);
        mpfr_init(r10570);
        mpfr_init(r10571);
        mpfr_init(r10572);
        mpfr_init(r10573);
        mpfr_init(r10574);
        mpfr_init_set_str(r10575, "7.416016917401288e-06", 10, MPFR_RNDN);
        mpfr_init(r10576);
        mpfr_init_set_str(r10577, "3", 10, MPFR_RNDN);
        mpfr_init(r10578);
        mpfr_init(r10579);
        mpfr_init(r10580);
        mpfr_init(r10581);
        mpfr_init(r10582);
        mpfr_init(r10583);
        mpfr_init(r10584);
        mpfr_init(r10585);
        mpfr_init(r10586);
        mpfr_init(r10587);
}

double f_dm(double x) {
        mpfr_set_d(r10568, x, MPFR_RNDN);
        ;
        mpfr_add(r10570, r10568, r10569, MPFR_RNDN);
        mpfr_div(r10571, r10568, r10570, MPFR_RNDN);
        mpfr_sub(r10572, r10568, r10569, MPFR_RNDN);
        mpfr_div(r10573, r10570, r10572, MPFR_RNDN);
        mpfr_sub(r10574, r10571, r10573, MPFR_RNDN);
        ;
        mpfr_set_si(r10576, mpfr_cmp(r10574, r10575) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r10578, r10577, MPFR_RNDN);
        mpfr_div(r10579, r10578, r10568, MPFR_RNDN);
        mpfr_div(r10580, r10577, r10568, MPFR_RNDN);
        mpfr_add(r10581, r10569, r10580, MPFR_RNDN);
        mpfr_mul(r10582, r10568, r10568, MPFR_RNDN);
        mpfr_div(r10583, r10581, r10582, MPFR_RNDN);
        mpfr_sub(r10584, r10579, r10583, MPFR_RNDN);
        mpfr_log(r10585, r10574, MPFR_RNDN);
        mpfr_exp(r10586, r10585, MPFR_RNDN);
        if (mpfr_get_si(r10576, MPFR_RNDN)) { mpfr_set(r10587, r10584, MPFR_RNDN); } else { mpfr_set(r10587, r10586, MPFR_RNDN); };
        return mpfr_get_d(r10587, MPFR_RNDN);
}

