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

char *name = "Asymptote B";

double f_if(float x) {
        float r2278393 = 1;
        float r2278394 = x;
        float r2278395 = r2278394 - r2278393;
        float r2278396 = r2278393 / r2278395;
        float r2278397 = r2278394 + r2278393;
        float r2278398 = r2278394 / r2278397;
        float r2278399 = r2278396 + r2278398;
        return r2278399;
}

double f_id(double x) {
        double r2278400 = 1;
        double r2278401 = x;
        double r2278402 = r2278401 - r2278400;
        double r2278403 = r2278400 / r2278402;
        double r2278404 = r2278401 + r2278400;
        double r2278405 = r2278401 / r2278404;
        double r2278406 = r2278403 + r2278405;
        return r2278406;
}


double f_of(float x) {
        float r2278407 = x;
        float r2278408 = 1;
        float r2278409 = r2278407 + r2278408;
        float r2278410 = r2278407 / r2278409;
        float r2278411 = r2278407 - r2278408;
        float r2278412 = r2278408 / r2278411;
        float r2278413 = r2278410 + r2278412;
        float r2278414 = exp(r2278413);
        float r2278415 = log(r2278414);
        return r2278415;
}

double f_od(double x) {
        double r2278416 = x;
        double r2278417 = 1;
        double r2278418 = r2278416 + r2278417;
        double r2278419 = r2278416 / r2278418;
        double r2278420 = r2278416 - r2278417;
        double r2278421 = r2278417 / r2278420;
        double r2278422 = r2278419 + r2278421;
        double r2278423 = exp(r2278422);
        double r2278424 = log(r2278423);
        return r2278424;
}

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 r2278425, r2278426, r2278427, r2278428, r2278429, r2278430, r2278431;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r2278425, "1", 10, MPFR_RNDN);
        mpfr_init(r2278426);
        mpfr_init(r2278427);
        mpfr_init(r2278428);
        mpfr_init(r2278429);
        mpfr_init(r2278430);
        mpfr_init(r2278431);
}

double f_im(double x) {
        ;
        mpfr_set_d(r2278426, x, MPFR_RNDN);
        mpfr_sub(r2278427, r2278426, r2278425, MPFR_RNDN);
        mpfr_div(r2278428, r2278425, r2278427, MPFR_RNDN);
        mpfr_add(r2278429, r2278426, r2278425, MPFR_RNDN);
        mpfr_div(r2278430, r2278426, r2278429, MPFR_RNDN);
        mpfr_add(r2278431, r2278428, r2278430, MPFR_RNDN);
        return mpfr_get_d(r2278431, MPFR_RNDN);
}

static mpfr_t r2278432, r2278433, r2278434, r2278435, r2278436, r2278437, r2278438, r2278439, r2278440;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r2278432);
        mpfr_init_set_str(r2278433, "1", 10, MPFR_RNDN);
        mpfr_init(r2278434);
        mpfr_init(r2278435);
        mpfr_init(r2278436);
        mpfr_init(r2278437);
        mpfr_init(r2278438);
        mpfr_init(r2278439);
        mpfr_init(r2278440);
}

double f_fm(double x) {
        mpfr_set_d(r2278432, x, MPFR_RNDN);
        ;
        mpfr_add(r2278434, r2278432, r2278433, MPFR_RNDN);
        mpfr_div(r2278435, r2278432, r2278434, MPFR_RNDN);
        mpfr_sub(r2278436, r2278432, r2278433, MPFR_RNDN);
        mpfr_div(r2278437, r2278433, r2278436, MPFR_RNDN);
        mpfr_add(r2278438, r2278435, r2278437, MPFR_RNDN);
        mpfr_exp(r2278439, r2278438, MPFR_RNDN);
        mpfr_log(r2278440, r2278439, MPFR_RNDN);
        return mpfr_get_d(r2278440, MPFR_RNDN);
}

static mpfr_t r2278441, r2278442, r2278443, r2278444, r2278445, r2278446, r2278447, r2278448, r2278449;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r2278441);
        mpfr_init_set_str(r2278442, "1", 10, MPFR_RNDN);
        mpfr_init(r2278443);
        mpfr_init(r2278444);
        mpfr_init(r2278445);
        mpfr_init(r2278446);
        mpfr_init(r2278447);
        mpfr_init(r2278448);
        mpfr_init(r2278449);
}

double f_dm(double x) {
        mpfr_set_d(r2278441, x, MPFR_RNDN);
        ;
        mpfr_add(r2278443, r2278441, r2278442, MPFR_RNDN);
        mpfr_div(r2278444, r2278441, r2278443, MPFR_RNDN);
        mpfr_sub(r2278445, r2278441, r2278442, MPFR_RNDN);
        mpfr_div(r2278446, r2278442, r2278445, MPFR_RNDN);
        mpfr_add(r2278447, r2278444, r2278446, MPFR_RNDN);
        mpfr_exp(r2278448, r2278447, MPFR_RNDN);
        mpfr_log(r2278449, r2278448, MPFR_RNDN);
        return mpfr_get_d(r2278449, MPFR_RNDN);
}

