#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 r10307 = n;
        float r10308 = 1;
        float r10309 = r10307 + r10308;
        float r10310 = log(r10309);
        float r10311 = r10309 * r10310;
        float r10312 = log(r10307);
        float r10313 = r10307 * r10312;
        float r10314 = r10311 - r10313;
        float r10315 = r10314 - r10308;
        return r10315;
}

double f_id(double n) {
        double r10316 = n;
        double r10317 = 1;
        double r10318 = r10316 + r10317;
        double r10319 = log(r10318);
        double r10320 = r10318 * r10319;
        double r10321 = log(r10316);
        double r10322 = r10316 * r10321;
        double r10323 = r10320 - r10322;
        double r10324 = r10323 - r10317;
        return r10324;
}


double f_of(float n) {
        float r10325 = n;
        float r10326 = log1p(r10325);
        float r10327 = 1;
        float r10328 = r10326 - r10327;
        float r10329 = 1/3;
        float r10330 = r10329 / r10325;
        float r10331 = r10327 / r10325;
        float r10332 = fma(r10330, r10331, r10327);
        float r10333 = 1/2;
        float r10334 = r10331 * r10333;
        float r10335 = r10332 - r10334;
        float r10336 = r10328 + r10335;
        return r10336;
}

double f_od(double n) {
        double r10337 = n;
        double r10338 = log1p(r10337);
        double r10339 = 1;
        double r10340 = r10338 - r10339;
        double r10341 = 1/3;
        double r10342 = r10341 / r10337;
        double r10343 = r10339 / r10337;
        double r10344 = fma(r10342, r10343, r10339);
        double r10345 = 1/2;
        double r10346 = r10343 * r10345;
        double r10347 = r10344 - r10346;
        double r10348 = r10340 + r10347;
        return r10348;
}

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 r10349, r10350, r10351, r10352, r10353, r10354, r10355, r10356, r10357;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10349);
        mpfr_init_set_str(r10350, "1", 10, MPFR_RNDN);
        mpfr_init(r10351);
        mpfr_init(r10352);
        mpfr_init(r10353);
        mpfr_init(r10354);
        mpfr_init(r10355);
        mpfr_init(r10356);
        mpfr_init(r10357);
}

double f_im(double n) {
        mpfr_set_d(r10349, n, MPFR_RNDN);
        ;
        mpfr_add(r10351, r10349, r10350, MPFR_RNDN);
        mpfr_log(r10352, r10351, MPFR_RNDN);
        mpfr_mul(r10353, r10351, r10352, MPFR_RNDN);
        mpfr_log(r10354, r10349, MPFR_RNDN);
        mpfr_mul(r10355, r10349, r10354, MPFR_RNDN);
        mpfr_sub(r10356, r10353, r10355, MPFR_RNDN);
        mpfr_sub(r10357, r10356, r10350, MPFR_RNDN);
        return mpfr_get_d(r10357, MPFR_RNDN);
}

static mpfr_t r10358, r10359, r10360, r10361, r10362, r10363, r10364, r10365, r10366, r10367, r10368, r10369;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10358);
        mpfr_init(r10359);
        mpfr_init_set_str(r10360, "1", 10, MPFR_RNDN);
        mpfr_init(r10361);
        mpfr_init_set_str(r10362, "1/3", 10, MPFR_RNDN);
        mpfr_init(r10363);
        mpfr_init(r10364);
        mpfr_init(r10365);
        mpfr_init_set_str(r10366, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10367);
        mpfr_init(r10368);
        mpfr_init(r10369);
}

double f_fm(double n) {
        mpfr_set_d(r10358, n, MPFR_RNDN);
        mpfr_log1p(r10359, r10358, MPFR_RNDN);
        ;
        mpfr_sub(r10361, r10359, r10360, MPFR_RNDN);
        ;
        mpfr_div(r10363, r10362, r10358, MPFR_RNDN);
        mpfr_div(r10364, r10360, r10358, MPFR_RNDN);
        mpfr_fma(r10365, r10363, r10364, r10360, MPFR_RNDN);
        ;
        mpfr_mul(r10367, r10364, r10366, MPFR_RNDN);
        mpfr_sub(r10368, r10365, r10367, MPFR_RNDN);
        mpfr_add(r10369, r10361, r10368, MPFR_RNDN);
        return mpfr_get_d(r10369, MPFR_RNDN);
}

static mpfr_t r10370, r10371, r10372, r10373, r10374, r10375, r10376, r10377, r10378, r10379, r10380, r10381;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10370);
        mpfr_init(r10371);
        mpfr_init_set_str(r10372, "1", 10, MPFR_RNDN);
        mpfr_init(r10373);
        mpfr_init_set_str(r10374, "1/3", 10, MPFR_RNDN);
        mpfr_init(r10375);
        mpfr_init(r10376);
        mpfr_init(r10377);
        mpfr_init_set_str(r10378, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10379);
        mpfr_init(r10380);
        mpfr_init(r10381);
}

double f_dm(double n) {
        mpfr_set_d(r10370, n, MPFR_RNDN);
        mpfr_log1p(r10371, r10370, MPFR_RNDN);
        ;
        mpfr_sub(r10373, r10371, r10372, MPFR_RNDN);
        ;
        mpfr_div(r10375, r10374, r10370, MPFR_RNDN);
        mpfr_div(r10376, r10372, r10370, MPFR_RNDN);
        mpfr_fma(r10377, r10375, r10376, r10372, MPFR_RNDN);
        ;
        mpfr_mul(r10379, r10376, r10378, MPFR_RNDN);
        mpfr_sub(r10380, r10377, r10379, MPFR_RNDN);
        mpfr_add(r10381, r10373, r10380, MPFR_RNDN);
        return mpfr_get_d(r10381, MPFR_RNDN);
}

