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

char *name = "Octave 3.8, oct_fill_randg";

double f_if(float a, float rand) {
        float r9988 = a;
        float r9989 = 1.0;
        float r9990 = 3.0;
        float r9991 = r9989 / r9990;
        float r9992 = r9988 - r9991;
        float r9993 = 1;
        float r9994 = 9;
        float r9995 = r9994 * r9992;
        float r9996 = sqrt(r9995);
        float r9997 = r9993 / r9996;
        float r9998 = rand;
        float r9999 = r9997 * r9998;
        float r10000 = r9993 + r9999;
        float r10001 = r9992 * r10000;
        return r10001;
}

double f_id(double a, double rand) {
        double r10002 = a;
        double r10003 = 1.0;
        double r10004 = 3.0;
        double r10005 = r10003 / r10004;
        double r10006 = r10002 - r10005;
        double r10007 = 1;
        double r10008 = 9;
        double r10009 = r10008 * r10006;
        double r10010 = sqrt(r10009);
        double r10011 = r10007 / r10010;
        double r10012 = rand;
        double r10013 = r10011 * r10012;
        double r10014 = r10007 + r10013;
        double r10015 = r10006 * r10014;
        return r10015;
}


double f_of(float a, float rand) {
        float r10016 = a;
        float r10017 = 1.0;
        float r10018 = 3.0;
        float r10019 = r10017 / r10018;
        float r10020 = r10016 - r10019;
        float r10021 = 1;
        float r10022 = 9;
        float r10023 = r10022 * r10020;
        float r10024 = 1/2;
        float r10025 = -r10024;
        float r10026 = pow(r10023, r10025);
        float r10027 = rand;
        float r10028 = r10026 * r10027;
        float r10029 = r10021 + r10028;
        float r10030 = r10020 * r10029;
        return r10030;
}

double f_od(double a, double rand) {
        double r10031 = a;
        double r10032 = 1.0;
        double r10033 = 3.0;
        double r10034 = r10032 / r10033;
        double r10035 = r10031 - r10034;
        double r10036 = 1;
        double r10037 = 9;
        double r10038 = r10037 * r10035;
        double r10039 = 1/2;
        double r10040 = -r10039;
        double r10041 = pow(r10038, r10040);
        double r10042 = rand;
        double r10043 = r10041 * r10042;
        double r10044 = r10036 + r10043;
        double r10045 = r10035 * r10044;
        return r10045;
}

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 r10046, r10047, r10048, r10049, r10050, r10051, r10052, r10053, r10054, r10055, r10056, r10057, r10058, r10059;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r10046);
        mpfr_init_set_str(r10047, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r10048, "3.0", 10, MPFR_RNDN);
        mpfr_init(r10049);
        mpfr_init(r10050);
        mpfr_init_set_str(r10051, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10052, "9", 10, MPFR_RNDN);
        mpfr_init(r10053);
        mpfr_init(r10054);
        mpfr_init(r10055);
        mpfr_init(r10056);
        mpfr_init(r10057);
        mpfr_init(r10058);
        mpfr_init(r10059);
}

double f_im(double a, double rand) {
        mpfr_set_d(r10046, a, MPFR_RNDN);
        ;
        ;
        mpfr_div(r10049, r10047, r10048, MPFR_RNDN);
        mpfr_sub(r10050, r10046, r10049, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r10053, r10052, r10050, MPFR_RNDN);
        mpfr_sqrt(r10054, r10053, MPFR_RNDN);
        mpfr_div(r10055, r10051, r10054, MPFR_RNDN);
        mpfr_set_d(r10056, rand, MPFR_RNDN);
        mpfr_mul(r10057, r10055, r10056, MPFR_RNDN);
        mpfr_add(r10058, r10051, r10057, MPFR_RNDN);
        mpfr_mul(r10059, r10050, r10058, MPFR_RNDN);
        return mpfr_get_d(r10059, MPFR_RNDN);
}

static mpfr_t r10060, r10061, r10062, r10063, r10064, r10065, r10066, r10067, r10068, r10069, r10070, r10071, r10072, r10073, r10074;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r10060);
        mpfr_init_set_str(r10061, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r10062, "3.0", 10, MPFR_RNDN);
        mpfr_init(r10063);
        mpfr_init(r10064);
        mpfr_init_set_str(r10065, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10066, "9", 10, MPFR_RNDN);
        mpfr_init(r10067);
        mpfr_init_set_str(r10068, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10069);
        mpfr_init(r10070);
        mpfr_init(r10071);
        mpfr_init(r10072);
        mpfr_init(r10073);
        mpfr_init(r10074);
}

double f_fm(double a, double rand) {
        mpfr_set_d(r10060, a, MPFR_RNDN);
        ;
        ;
        mpfr_div(r10063, r10061, r10062, MPFR_RNDN);
        mpfr_sub(r10064, r10060, r10063, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r10067, r10066, r10064, MPFR_RNDN);
        ;
        mpfr_neg(r10069, r10068, MPFR_RNDN);
        mpfr_pow(r10070, r10067, r10069, MPFR_RNDN);
        mpfr_set_d(r10071, rand, MPFR_RNDN);
        mpfr_mul(r10072, r10070, r10071, MPFR_RNDN);
        mpfr_add(r10073, r10065, r10072, MPFR_RNDN);
        mpfr_mul(r10074, r10064, r10073, MPFR_RNDN);
        return mpfr_get_d(r10074, MPFR_RNDN);
}

static mpfr_t r10075, r10076, r10077, r10078, r10079, r10080, r10081, r10082, r10083, r10084, r10085, r10086, r10087, r10088, r10089;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r10075);
        mpfr_init_set_str(r10076, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r10077, "3.0", 10, MPFR_RNDN);
        mpfr_init(r10078);
        mpfr_init(r10079);
        mpfr_init_set_str(r10080, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10081, "9", 10, MPFR_RNDN);
        mpfr_init(r10082);
        mpfr_init_set_str(r10083, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10084);
        mpfr_init(r10085);
        mpfr_init(r10086);
        mpfr_init(r10087);
        mpfr_init(r10088);
        mpfr_init(r10089);
}

double f_dm(double a, double rand) {
        mpfr_set_d(r10075, a, MPFR_RNDN);
        ;
        ;
        mpfr_div(r10078, r10076, r10077, MPFR_RNDN);
        mpfr_sub(r10079, r10075, r10078, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r10082, r10081, r10079, MPFR_RNDN);
        ;
        mpfr_neg(r10084, r10083, MPFR_RNDN);
        mpfr_pow(r10085, r10082, r10084, MPFR_RNDN);
        mpfr_set_d(r10086, rand, MPFR_RNDN);
        mpfr_mul(r10087, r10085, r10086, MPFR_RNDN);
        mpfr_add(r10088, r10080, r10087, MPFR_RNDN);
        mpfr_mul(r10089, r10079, r10088, MPFR_RNDN);
        return mpfr_get_d(r10089, MPFR_RNDN);
}

