#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 r9946 = n;
        float r9947 = 1.0f;
        float r9948 = r9946 + r9947;
        float r9949 = log(r9948);
        float r9950 = r9948 * r9949;
        float r9951 = log(r9946);
        float r9952 = r9946 * r9951;
        float r9953 = r9950 - r9952;
        float r9954 = r9953 - r9947;
        return r9954;
}

double f_id(double n) {
        double r9955 = n;
        double r9956 = 1.0;
        double r9957 = r9955 + r9956;
        double r9958 = log(r9957);
        double r9959 = r9957 * r9958;
        double r9960 = log(r9955);
        double r9961 = r9955 * r9960;
        double r9962 = r9959 - r9961;
        double r9963 = r9962 - r9956;
        return r9963;
}


double f_of(float n) {
        float r9964 = 1.0f;
        float r9965 = n;
        float r9966 = r9964 / r9965;
        float r9967 = 0.5f;
        float r9968 = 0.16666666666666666f;
        float r9969 = r9968 / r9965;
        float r9970 = r9967 - r9969;
        float r9971 = log(r9965);
        float r9972 = fma(r9966, r9970, r9971);
        return r9972;
}

double f_od(double n) {
        double r9973 = 1.0;
        double r9974 = n;
        double r9975 = r9973 / r9974;
        double r9976 = 0.5;
        double r9977 = 0.16666666666666666;
        double r9978 = r9977 / r9974;
        double r9979 = r9976 - r9978;
        double r9980 = log(r9974);
        double r9981 = fma(r9975, r9979, r9980);
        return r9981;
}

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 r9982, r9983, r9984, r9985, r9986, r9987, r9988, r9989, r9990;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9982);
        mpfr_init_set_str(r9983, "1", 10, MPFR_RNDN);
        mpfr_init(r9984);
        mpfr_init(r9985);
        mpfr_init(r9986);
        mpfr_init(r9987);
        mpfr_init(r9988);
        mpfr_init(r9989);
        mpfr_init(r9990);
}

double f_im(double n) {
        mpfr_set_d(r9982, n, MPFR_RNDN);
        ;
        mpfr_add(r9984, r9982, r9983, MPFR_RNDN);
        mpfr_log(r9985, r9984, MPFR_RNDN);
        mpfr_mul(r9986, r9984, r9985, MPFR_RNDN);
        mpfr_log(r9987, r9982, MPFR_RNDN);
        mpfr_mul(r9988, r9982, r9987, MPFR_RNDN);
        mpfr_sub(r9989, r9986, r9988, MPFR_RNDN);
        mpfr_sub(r9990, r9989, r9983, MPFR_RNDN);
        return mpfr_get_d(r9990, MPFR_RNDN);
}

static mpfr_t r9991, r9992, r9993, r9994, r9995, r9996, r9997, r9998, r9999;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r9991, "1", 10, MPFR_RNDN);
        mpfr_init(r9992);
        mpfr_init(r9993);
        mpfr_init_set_str(r9994, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r9995, "1/6", 10, MPFR_RNDN);
        mpfr_init(r9996);
        mpfr_init(r9997);
        mpfr_init(r9998);
        mpfr_init(r9999);
}

double f_fm(double n) {
        ;
        mpfr_set_d(r9992, n, MPFR_RNDN);
        mpfr_div(r9993, r9991, r9992, MPFR_RNDN);
        ;
        ;
        mpfr_div(r9996, r9995, r9992, MPFR_RNDN);
        mpfr_sub(r9997, r9994, r9996, MPFR_RNDN);
        mpfr_log(r9998, r9992, MPFR_RNDN);
        mpfr_fma(r9999, r9993, r9997, r9998, MPFR_RNDN);
        return mpfr_get_d(r9999, MPFR_RNDN);
}

static mpfr_t r10000, r10001, r10002, r10003, r10004, r10005, r10006, r10007, r10008;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r10000, "1", 10, MPFR_RNDN);
        mpfr_init(r10001);
        mpfr_init(r10002);
        mpfr_init_set_str(r10003, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r10004, "1/6", 10, MPFR_RNDN);
        mpfr_init(r10005);
        mpfr_init(r10006);
        mpfr_init(r10007);
        mpfr_init(r10008);
}

double f_dm(double n) {
        ;
        mpfr_set_d(r10001, n, MPFR_RNDN);
        mpfr_div(r10002, r10000, r10001, MPFR_RNDN);
        ;
        ;
        mpfr_div(r10005, r10004, r10001, MPFR_RNDN);
        mpfr_sub(r10006, r10003, r10005, MPFR_RNDN);
        mpfr_log(r10007, r10001, MPFR_RNDN);
        mpfr_fma(r10008, r10002, r10006, r10007, MPFR_RNDN);
        return mpfr_get_d(r10008, MPFR_RNDN);
}

