#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 r9907 = n;
        float r9908 = 1.0f;
        float r9909 = r9907 + r9908;
        float r9910 = log(r9909);
        float r9911 = r9909 * r9910;
        float r9912 = log(r9907);
        float r9913 = r9907 * r9912;
        float r9914 = r9911 - r9913;
        float r9915 = r9914 - r9908;
        return r9915;
}

double f_id(double n) {
        double r9916 = n;
        double r9917 = 1.0;
        double r9918 = r9916 + r9917;
        double r9919 = log(r9918);
        double r9920 = r9918 * r9919;
        double r9921 = log(r9916);
        double r9922 = r9916 * r9921;
        double r9923 = r9920 - r9922;
        double r9924 = r9923 - r9917;
        return r9924;
}


double f_of(float n) {
        float r9925 = n;
        float r9926 = 0.3333333333333333f;
        float r9927 = r9926 / r9925;
        float r9928 = 0.5f;
        float r9929 = r9927 - r9928;
        float r9930 = 1.0f;
        float r9931 = r9925 * r9925;
        float r9932 = r9930 / r9931;
        float r9933 = r9930 / r9925;
        float r9934 = fma(r9929, r9932, r9933);
        float r9935 = r9930 + r9925;
        float r9936 = log(r9935);
        float r9937 = r9936 - r9930;
        float r9938 = fma(r9925, r9934, r9937);
        return r9938;
}

double f_od(double n) {
        double r9939 = n;
        double r9940 = 0.3333333333333333;
        double r9941 = r9940 / r9939;
        double r9942 = 0.5;
        double r9943 = r9941 - r9942;
        double r9944 = 1.0;
        double r9945 = r9939 * r9939;
        double r9946 = r9944 / r9945;
        double r9947 = r9944 / r9939;
        double r9948 = fma(r9943, r9946, r9947);
        double r9949 = r9944 + r9939;
        double r9950 = log(r9949);
        double r9951 = r9950 - r9944;
        double r9952 = fma(r9939, r9948, r9951);
        return r9952;
}

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 r9953, r9954, r9955, r9956, r9957, r9958, r9959, r9960, r9961;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9953);
        mpfr_init_set_str(r9954, "1", 10, MPFR_RNDN);
        mpfr_init(r9955);
        mpfr_init(r9956);
        mpfr_init(r9957);
        mpfr_init(r9958);
        mpfr_init(r9959);
        mpfr_init(r9960);
        mpfr_init(r9961);
}

double f_im(double n) {
        mpfr_set_d(r9953, n, MPFR_RNDN);
        ;
        mpfr_add(r9955, r9953, r9954, MPFR_RNDN);
        mpfr_log(r9956, r9955, MPFR_RNDN);
        mpfr_mul(r9957, r9955, r9956, MPFR_RNDN);
        mpfr_log(r9958, r9953, MPFR_RNDN);
        mpfr_mul(r9959, r9953, r9958, MPFR_RNDN);
        mpfr_sub(r9960, r9957, r9959, MPFR_RNDN);
        mpfr_sub(r9961, r9960, r9954, MPFR_RNDN);
        return mpfr_get_d(r9961, MPFR_RNDN);
}

static mpfr_t r9962, r9963, r9964, r9965, r9966, r9967, r9968, r9969, r9970, r9971, r9972, r9973, r9974, r9975;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9962);
        mpfr_init_set_str(r9963, "1/3", 10, MPFR_RNDN);
        mpfr_init(r9964);
        mpfr_init_set_str(r9965, "1/2", 10, MPFR_RNDN);
        mpfr_init(r9966);
        mpfr_init_set_str(r9967, "1", 10, MPFR_RNDN);
        mpfr_init(r9968);
        mpfr_init(r9969);
        mpfr_init(r9970);
        mpfr_init(r9971);
        mpfr_init(r9972);
        mpfr_init(r9973);
        mpfr_init(r9974);
        mpfr_init(r9975);
}

double f_fm(double n) {
        mpfr_set_d(r9962, n, MPFR_RNDN);
        ;
        mpfr_div(r9964, r9963, r9962, MPFR_RNDN);
        ;
        mpfr_sub(r9966, r9964, r9965, MPFR_RNDN);
        ;
        mpfr_mul(r9968, r9962, r9962, MPFR_RNDN);
        mpfr_div(r9969, r9967, r9968, MPFR_RNDN);
        mpfr_div(r9970, r9967, r9962, MPFR_RNDN);
        mpfr_fma(r9971, r9966, r9969, r9970, MPFR_RNDN);
        mpfr_add(r9972, r9967, r9962, MPFR_RNDN);
        mpfr_log(r9973, r9972, MPFR_RNDN);
        mpfr_sub(r9974, r9973, r9967, MPFR_RNDN);
        mpfr_fma(r9975, r9962, r9971, r9974, MPFR_RNDN);
        return mpfr_get_d(r9975, MPFR_RNDN);
}

static mpfr_t r9976, r9977, r9978, r9979, r9980, r9981, r9982, r9983, r9984, r9985, r9986, r9987, r9988, r9989;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9976);
        mpfr_init_set_str(r9977, "1/3", 10, MPFR_RNDN);
        mpfr_init(r9978);
        mpfr_init_set_str(r9979, "1/2", 10, MPFR_RNDN);
        mpfr_init(r9980);
        mpfr_init_set_str(r9981, "1", 10, MPFR_RNDN);
        mpfr_init(r9982);
        mpfr_init(r9983);
        mpfr_init(r9984);
        mpfr_init(r9985);
        mpfr_init(r9986);
        mpfr_init(r9987);
        mpfr_init(r9988);
        mpfr_init(r9989);
}

double f_dm(double n) {
        mpfr_set_d(r9976, n, MPFR_RNDN);
        ;
        mpfr_div(r9978, r9977, r9976, MPFR_RNDN);
        ;
        mpfr_sub(r9980, r9978, r9979, MPFR_RNDN);
        ;
        mpfr_mul(r9982, r9976, r9976, MPFR_RNDN);
        mpfr_div(r9983, r9981, r9982, MPFR_RNDN);
        mpfr_div(r9984, r9981, r9976, MPFR_RNDN);
        mpfr_fma(r9985, r9980, r9983, r9984, MPFR_RNDN);
        mpfr_add(r9986, r9981, r9976, MPFR_RNDN);
        mpfr_log(r9987, r9986, MPFR_RNDN);
        mpfr_sub(r9988, r9987, r9981, MPFR_RNDN);
        mpfr_fma(r9989, r9976, r9985, r9988, MPFR_RNDN);
        return mpfr_get_d(r9989, MPFR_RNDN);
}

