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

char *name = "Numeric.AD.Rank1.Halley:findZero from ad-4.2.4";

double f_if(float x, float y, float z, float t) {
        float r43140 = x;
        float r43141 = y;
        float r43142 = 2.0f;
        float r43143 = r43141 * r43142;
        float r43144 = z;
        float r43145 = r43143 * r43144;
        float r43146 = r43144 * r43142;
        float r43147 = r43146 * r43144;
        float r43148 = t;
        float r43149 = r43141 * r43148;
        float r43150 = r43147 - r43149;
        float r43151 = r43145 / r43150;
        float r43152 = r43140 - r43151;
        return r43152;
}

double f_id(double x, double y, double z, double t) {
        double r43153 = x;
        double r43154 = y;
        double r43155 = 2.0;
        double r43156 = r43154 * r43155;
        double r43157 = z;
        double r43158 = r43156 * r43157;
        double r43159 = r43157 * r43155;
        double r43160 = r43159 * r43157;
        double r43161 = t;
        double r43162 = r43154 * r43161;
        double r43163 = r43160 - r43162;
        double r43164 = r43158 / r43163;
        double r43165 = r43153 - r43164;
        return r43165;
}


double f_of(float x, float y, float z, float t) {
        float r43166 = x;
        float r43167 = 1.0f;
        float r43168 = z;
        float r43169 = y;
        float r43170 = r43168 / r43169;
        float r43171 = t;
        float r43172 = 2.0f;
        float r43173 = r43172 * r43168;
        float r43174 = r43171 / r43173;
        float r43175 = r43170 - r43174;
        float r43176 = r43167 / r43175;
        float r43177 = r43166 - r43176;
        return r43177;
}

double f_od(double x, double y, double z, double t) {
        double r43178 = x;
        double r43179 = 1.0;
        double r43180 = z;
        double r43181 = y;
        double r43182 = r43180 / r43181;
        double r43183 = t;
        double r43184 = 2.0;
        double r43185 = r43184 * r43180;
        double r43186 = r43183 / r43185;
        double r43187 = r43182 - r43186;
        double r43188 = r43179 / r43187;
        double r43189 = r43178 - r43188;
        return r43189;
}

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 r43190, r43191, r43192, r43193, r43194, r43195, r43196, r43197, r43198, r43199, r43200, r43201, r43202;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r43190);
        mpfr_init(r43191);
        mpfr_init_set_str(r43192, "2.0", 10, MPFR_RNDN);
        mpfr_init(r43193);
        mpfr_init(r43194);
        mpfr_init(r43195);
        mpfr_init(r43196);
        mpfr_init(r43197);
        mpfr_init(r43198);
        mpfr_init(r43199);
        mpfr_init(r43200);
        mpfr_init(r43201);
        mpfr_init(r43202);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r43190, x, MPFR_RNDN);
        mpfr_set_d(r43191, y, MPFR_RNDN);
        ;
        mpfr_mul(r43193, r43191, r43192, MPFR_RNDN);
        mpfr_set_d(r43194, z, MPFR_RNDN);
        mpfr_mul(r43195, r43193, r43194, MPFR_RNDN);
        mpfr_mul(r43196, r43194, r43192, MPFR_RNDN);
        mpfr_mul(r43197, r43196, r43194, MPFR_RNDN);
        mpfr_set_d(r43198, t, MPFR_RNDN);
        mpfr_mul(r43199, r43191, r43198, MPFR_RNDN);
        mpfr_sub(r43200, r43197, r43199, MPFR_RNDN);
        mpfr_div(r43201, r43195, r43200, MPFR_RNDN);
        mpfr_sub(r43202, r43190, r43201, MPFR_RNDN);
        return mpfr_get_d(r43202, MPFR_RNDN);
}

static mpfr_t r43203, r43204, r43205, r43206, r43207, r43208, r43209, r43210, r43211, r43212, r43213, r43214;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r43203);
        mpfr_init_set_str(r43204, "1", 10, MPFR_RNDN);
        mpfr_init(r43205);
        mpfr_init(r43206);
        mpfr_init(r43207);
        mpfr_init(r43208);
        mpfr_init_set_str(r43209, "2.0", 10, MPFR_RNDN);
        mpfr_init(r43210);
        mpfr_init(r43211);
        mpfr_init(r43212);
        mpfr_init(r43213);
        mpfr_init(r43214);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r43203, x, MPFR_RNDN);
        ;
        mpfr_set_d(r43205, z, MPFR_RNDN);
        mpfr_set_d(r43206, y, MPFR_RNDN);
        mpfr_div(r43207, r43205, r43206, MPFR_RNDN);
        mpfr_set_d(r43208, t, MPFR_RNDN);
        ;
        mpfr_mul(r43210, r43209, r43205, MPFR_RNDN);
        mpfr_div(r43211, r43208, r43210, MPFR_RNDN);
        mpfr_sub(r43212, r43207, r43211, MPFR_RNDN);
        mpfr_div(r43213, r43204, r43212, MPFR_RNDN);
        mpfr_sub(r43214, r43203, r43213, MPFR_RNDN);
        return mpfr_get_d(r43214, MPFR_RNDN);
}

static mpfr_t r43215, r43216, r43217, r43218, r43219, r43220, r43221, r43222, r43223, r43224, r43225, r43226;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r43215);
        mpfr_init_set_str(r43216, "1", 10, MPFR_RNDN);
        mpfr_init(r43217);
        mpfr_init(r43218);
        mpfr_init(r43219);
        mpfr_init(r43220);
        mpfr_init_set_str(r43221, "2.0", 10, MPFR_RNDN);
        mpfr_init(r43222);
        mpfr_init(r43223);
        mpfr_init(r43224);
        mpfr_init(r43225);
        mpfr_init(r43226);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r43215, x, MPFR_RNDN);
        ;
        mpfr_set_d(r43217, z, MPFR_RNDN);
        mpfr_set_d(r43218, y, MPFR_RNDN);
        mpfr_div(r43219, r43217, r43218, MPFR_RNDN);
        mpfr_set_d(r43220, t, MPFR_RNDN);
        ;
        mpfr_mul(r43222, r43221, r43217, MPFR_RNDN);
        mpfr_div(r43223, r43220, r43222, MPFR_RNDN);
        mpfr_sub(r43224, r43219, r43223, MPFR_RNDN);
        mpfr_div(r43225, r43216, r43224, MPFR_RNDN);
        mpfr_sub(r43226, r43215, r43225, MPFR_RNDN);
        return mpfr_get_d(r43226, MPFR_RNDN);
}

