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

char *name = "logs (example 3.8)";

double f_if(float n) {
        float r10163 = n;
        float r10164 = 1;
        float r10165 = r10163 + r10164;
        float r10166 = log(r10165);
        float r10167 = r10165 * r10166;
        float r10168 = log(r10163);
        float r10169 = r10163 * r10168;
        float r10170 = r10167 - r10169;
        float r10171 = r10170 - r10164;
        return r10171;
}

double f_id(double n) {
        double r10172 = n;
        double r10173 = 1;
        double r10174 = r10172 + r10173;
        double r10175 = log(r10174);
        double r10176 = r10174 * r10175;
        double r10177 = log(r10172);
        double r10178 = r10172 * r10177;
        double r10179 = r10176 - r10178;
        double r10180 = r10179 - r10173;
        return r10180;
}


double f_of(float n) {
        float r10181 = n;
        float r10182 = log1p(r10181);
        float r10183 = 1;
        float r10184 = r10182 - r10183;
        float r10185 = 1/3;
        float r10186 = r10185 / r10181;
        float r10187 = r10183 / r10181;
        float r10188 = fma(r10186, r10187, r10183);
        float r10189 = 1/2;
        float r10190 = r10187 * r10189;
        float r10191 = r10188 - r10190;
        float r10192 = r10184 + r10191;
        return r10192;
}

double f_od(double n) {
        double r10193 = n;
        double r10194 = log1p(r10193);
        double r10195 = 1;
        double r10196 = r10194 - r10195;
        double r10197 = 1/3;
        double r10198 = r10197 / r10193;
        double r10199 = r10195 / r10193;
        double r10200 = fma(r10198, r10199, r10195);
        double r10201 = 1/2;
        double r10202 = r10199 * r10201;
        double r10203 = r10200 - r10202;
        double r10204 = r10196 + r10203;
        return r10204;
}

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 r10205, r10206, r10207, r10208, r10209, r10210, r10211, r10212, r10213;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10205);
        mpfr_init_set_str(r10206, "1", 10, MPFR_RNDN);
        mpfr_init(r10207);
        mpfr_init(r10208);
        mpfr_init(r10209);
        mpfr_init(r10210);
        mpfr_init(r10211);
        mpfr_init(r10212);
        mpfr_init(r10213);
}

double f_im(double n) {
        mpfr_set_d(r10205, n, MPFR_RNDN);
        ;
        mpfr_add(r10207, r10205, r10206, MPFR_RNDN);
        mpfr_log(r10208, r10207, MPFR_RNDN);
        mpfr_mul(r10209, r10207, r10208, MPFR_RNDN);
        mpfr_log(r10210, r10205, MPFR_RNDN);
        mpfr_mul(r10211, r10205, r10210, MPFR_RNDN);
        mpfr_sub(r10212, r10209, r10211, MPFR_RNDN);
        mpfr_sub(r10213, r10212, r10206, MPFR_RNDN);
        return mpfr_get_d(r10213, MPFR_RNDN);
}

static mpfr_t r10214, r10215, r10216, r10217, r10218, r10219, r10220, r10221, r10222, r10223, r10224, r10225;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10214);
        mpfr_init(r10215);
        mpfr_init_set_str(r10216, "1", 10, MPFR_RNDN);
        mpfr_init(r10217);
        mpfr_init_set_str(r10218, "1/3", 10, MPFR_RNDN);
        mpfr_init(r10219);
        mpfr_init(r10220);
        mpfr_init(r10221);
        mpfr_init_set_str(r10222, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10223);
        mpfr_init(r10224);
        mpfr_init(r10225);
}

double f_fm(double n) {
        mpfr_set_d(r10214, n, MPFR_RNDN);
        mpfr_log1p(r10215, r10214, MPFR_RNDN);
        ;
        mpfr_sub(r10217, r10215, r10216, MPFR_RNDN);
        ;
        mpfr_div(r10219, r10218, r10214, MPFR_RNDN);
        mpfr_div(r10220, r10216, r10214, MPFR_RNDN);
        mpfr_fma(r10221, r10219, r10220, r10216, MPFR_RNDN);
        ;
        mpfr_mul(r10223, r10220, r10222, MPFR_RNDN);
        mpfr_sub(r10224, r10221, r10223, MPFR_RNDN);
        mpfr_add(r10225, r10217, r10224, MPFR_RNDN);
        return mpfr_get_d(r10225, MPFR_RNDN);
}

static mpfr_t r10226, r10227, r10228, r10229, r10230, r10231, r10232, r10233, r10234, r10235, r10236, r10237;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10226);
        mpfr_init(r10227);
        mpfr_init_set_str(r10228, "1", 10, MPFR_RNDN);
        mpfr_init(r10229);
        mpfr_init_set_str(r10230, "1/3", 10, MPFR_RNDN);
        mpfr_init(r10231);
        mpfr_init(r10232);
        mpfr_init(r10233);
        mpfr_init_set_str(r10234, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10235);
        mpfr_init(r10236);
        mpfr_init(r10237);
}

double f_dm(double n) {
        mpfr_set_d(r10226, n, MPFR_RNDN);
        mpfr_log1p(r10227, r10226, MPFR_RNDN);
        ;
        mpfr_sub(r10229, r10227, r10228, MPFR_RNDN);
        ;
        mpfr_div(r10231, r10230, r10226, MPFR_RNDN);
        mpfr_div(r10232, r10228, r10226, MPFR_RNDN);
        mpfr_fma(r10233, r10231, r10232, r10228, MPFR_RNDN);
        ;
        mpfr_mul(r10235, r10232, r10234, MPFR_RNDN);
        mpfr_sub(r10236, r10233, r10235, MPFR_RNDN);
        mpfr_add(r10237, r10229, r10236, MPFR_RNDN);
        return mpfr_get_d(r10237, MPFR_RNDN);
}

