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

char *name = "a parameter of renormalized beta distribution";

double f_if(float m, float v) {
        float r18359929 = m;
        float r18359930 = 1;
        float r18359931 = r18359930 - r18359929;
        float r18359932 = r18359929 * r18359931;
        float r18359933 = v;
        float r18359934 = r18359932 / r18359933;
        float r18359935 = r18359934 - r18359930;
        float r18359936 = r18359935 * r18359929;
        return r18359936;
}

double f_id(double m, double v) {
        double r18359937 = m;
        double r18359938 = 1;
        double r18359939 = r18359938 - r18359937;
        double r18359940 = r18359937 * r18359939;
        double r18359941 = v;
        double r18359942 = r18359940 / r18359941;
        double r18359943 = r18359942 - r18359938;
        double r18359944 = r18359943 * r18359937;
        return r18359944;
}


double f_of(float m, float v) {
        float r18359945 = m;
        float r18359946 = r18359945 * r18359945;
        float r18359947 = r18359945 - r18359946;
        float r18359948 = v;
        float r18359949 = r18359945 / r18359948;
        float r18359950 = r18359947 * r18359949;
        float r18359951 = r18359950 - r18359945;
        return r18359951;
}

double f_od(double m, double v) {
        double r18359952 = m;
        double r18359953 = r18359952 * r18359952;
        double r18359954 = r18359952 - r18359953;
        double r18359955 = v;
        double r18359956 = r18359952 / r18359955;
        double r18359957 = r18359954 * r18359956;
        double r18359958 = r18359957 - r18359952;
        return r18359958;
}

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 r18359959, r18359960, r18359961, r18359962, r18359963, r18359964, r18359965, r18359966;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r18359959);
        mpfr_init_set_str(r18359960, "1", 10, MPFR_RNDN);
        mpfr_init(r18359961);
        mpfr_init(r18359962);
        mpfr_init(r18359963);
        mpfr_init(r18359964);
        mpfr_init(r18359965);
        mpfr_init(r18359966);
}

double f_im(double m, double v) {
        mpfr_set_d(r18359959, m, MPFR_RNDN);
        ;
        mpfr_sub(r18359961, r18359960, r18359959, MPFR_RNDN);
        mpfr_mul(r18359962, r18359959, r18359961, MPFR_RNDN);
        mpfr_set_d(r18359963, v, MPFR_RNDN);
        mpfr_div(r18359964, r18359962, r18359963, MPFR_RNDN);
        mpfr_sub(r18359965, r18359964, r18359960, MPFR_RNDN);
        mpfr_mul(r18359966, r18359965, r18359959, MPFR_RNDN);
        return mpfr_get_d(r18359966, MPFR_RNDN);
}

static mpfr_t r18359967, r18359968, r18359969, r18359970, r18359971, r18359972, r18359973;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r18359967);
        mpfr_init(r18359968);
        mpfr_init(r18359969);
        mpfr_init(r18359970);
        mpfr_init(r18359971);
        mpfr_init(r18359972);
        mpfr_init(r18359973);
}

double f_fm(double m, double v) {
        mpfr_set_d(r18359967, m, MPFR_RNDN);
        mpfr_mul(r18359968, r18359967, r18359967, MPFR_RNDN);
        mpfr_sub(r18359969, r18359967, r18359968, MPFR_RNDN);
        mpfr_set_d(r18359970, v, MPFR_RNDN);
        mpfr_div(r18359971, r18359967, r18359970, MPFR_RNDN);
        mpfr_mul(r18359972, r18359969, r18359971, MPFR_RNDN);
        mpfr_sub(r18359973, r18359972, r18359967, MPFR_RNDN);
        return mpfr_get_d(r18359973, MPFR_RNDN);
}

static mpfr_t r18359974, r18359975, r18359976, r18359977, r18359978, r18359979, r18359980;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r18359974);
        mpfr_init(r18359975);
        mpfr_init(r18359976);
        mpfr_init(r18359977);
        mpfr_init(r18359978);
        mpfr_init(r18359979);
        mpfr_init(r18359980);
}

double f_dm(double m, double v) {
        mpfr_set_d(r18359974, m, MPFR_RNDN);
        mpfr_mul(r18359975, r18359974, r18359974, MPFR_RNDN);
        mpfr_sub(r18359976, r18359974, r18359975, MPFR_RNDN);
        mpfr_set_d(r18359977, v, MPFR_RNDN);
        mpfr_div(r18359978, r18359974, r18359977, MPFR_RNDN);
        mpfr_mul(r18359979, r18359976, r18359978, MPFR_RNDN);
        mpfr_sub(r18359980, r18359979, r18359974, MPFR_RNDN);
        return mpfr_get_d(r18359980, MPFR_RNDN);
}

