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

char *name = "Quadratic roots, narrow range";

double f_if(float a, float b, float c) {
        float r7978 = b;
        float r7979 = -r7978;
        float r7980 = r7978 * r7978;
        float r7981 = 4.0f;
        float r7982 = a;
        float r7983 = r7981 * r7982;
        float r7984 = c;
        float r7985 = r7983 * r7984;
        float r7986 = r7980 - r7985;
        float r7987 = sqrt(r7986);
        float r7988 = r7979 + r7987;
        float r7989 = 2.0f;
        float r7990 = r7989 * r7982;
        float r7991 = r7988 / r7990;
        return r7991;
}

double f_id(double a, double b, double c) {
        double r7992 = b;
        double r7993 = -r7992;
        double r7994 = r7992 * r7992;
        double r7995 = 4.0;
        double r7996 = a;
        double r7997 = r7995 * r7996;
        double r7998 = c;
        double r7999 = r7997 * r7998;
        double r8000 = r7994 - r7999;
        double r8001 = sqrt(r8000);
        double r8002 = r7993 + r8001;
        double r8003 = 2.0;
        double r8004 = r8003 * r7996;
        double r8005 = r8002 / r8004;
        return r8005;
}


double f_of(float a, float b, float c) {
        float r8006 = 4.0f;
        float r8007 = -r8006;
        float r8008 = 2.0f;
        float r8009 = r8007 / r8008;
        float r8010 = c;
        float r8011 = b;
        float r8012 = pow(r8011, r8006);
        float r8013 = a;
        float r8014 = r8010 * r8013;
        float r8015 = r8006 * r8014;
        float r8016 = r8015 * r8015;
        float r8017 = r8012 - r8016;
        float r8018 = r8011 * r8011;
        float r8019 = r8018 + r8015;
        float r8020 = r8017 / r8019;
        float r8021 = sqrt(r8020);
        float r8022 = r8021 + r8011;
        float r8023 = r8010 / r8022;
        float r8024 = r8009 * r8023;
        return r8024;
}

double f_od(double a, double b, double c) {
        double r8025 = 4.0;
        double r8026 = -r8025;
        double r8027 = 2.0;
        double r8028 = r8026 / r8027;
        double r8029 = c;
        double r8030 = b;
        double r8031 = pow(r8030, r8025);
        double r8032 = a;
        double r8033 = r8029 * r8032;
        double r8034 = r8025 * r8033;
        double r8035 = r8034 * r8034;
        double r8036 = r8031 - r8035;
        double r8037 = r8030 * r8030;
        double r8038 = r8037 + r8034;
        double r8039 = r8036 / r8038;
        double r8040 = sqrt(r8039);
        double r8041 = r8040 + r8030;
        double r8042 = r8029 / r8041;
        double r8043 = r8028 * r8042;
        return r8043;
}

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 r8044, r8045, r8046, r8047, r8048, r8049, r8050, r8051, r8052, r8053, r8054, r8055, r8056, r8057;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8044);
        mpfr_init(r8045);
        mpfr_init(r8046);
        mpfr_init_set_str(r8047, "4", 10, MPFR_RNDN);
        mpfr_init(r8048);
        mpfr_init(r8049);
        mpfr_init(r8050);
        mpfr_init(r8051);
        mpfr_init(r8052);
        mpfr_init(r8053);
        mpfr_init(r8054);
        mpfr_init_set_str(r8055, "2", 10, MPFR_RNDN);
        mpfr_init(r8056);
        mpfr_init(r8057);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r8044, b, MPFR_RNDN);
        mpfr_neg(r8045, r8044, MPFR_RNDN);
        mpfr_mul(r8046, r8044, r8044, MPFR_RNDN);
        ;
        mpfr_set_d(r8048, a, MPFR_RNDN);
        mpfr_mul(r8049, r8047, r8048, MPFR_RNDN);
        mpfr_set_d(r8050, c, MPFR_RNDN);
        mpfr_mul(r8051, r8049, r8050, MPFR_RNDN);
        mpfr_sub(r8052, r8046, r8051, MPFR_RNDN);
        mpfr_sqrt(r8053, r8052, MPFR_RNDN);
        mpfr_add(r8054, r8045, r8053, MPFR_RNDN);
        ;
        mpfr_mul(r8056, r8055, r8048, MPFR_RNDN);
        mpfr_div(r8057, r8054, r8056, MPFR_RNDN);
        return mpfr_get_d(r8057, MPFR_RNDN);
}

static mpfr_t r8058, r8059, r8060, r8061, r8062, r8063, r8064, r8065, r8066, r8067, r8068, r8069, r8070, r8071, r8072, r8073, r8074, r8075, r8076;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8058, "4", 10, MPFR_RNDN);
        mpfr_init(r8059);
        mpfr_init_set_str(r8060, "2", 10, MPFR_RNDN);
        mpfr_init(r8061);
        mpfr_init(r8062);
        mpfr_init(r8063);
        mpfr_init(r8064);
        mpfr_init(r8065);
        mpfr_init(r8066);
        mpfr_init(r8067);
        mpfr_init(r8068);
        mpfr_init(r8069);
        mpfr_init(r8070);
        mpfr_init(r8071);
        mpfr_init(r8072);
        mpfr_init(r8073);
        mpfr_init(r8074);
        mpfr_init(r8075);
        mpfr_init(r8076);
}

double f_fm(double a, double b, double c) {
        ;
        mpfr_neg(r8059, r8058, MPFR_RNDN);
        ;
        mpfr_div(r8061, r8059, r8060, MPFR_RNDN);
        mpfr_set_d(r8062, c, MPFR_RNDN);
        mpfr_set_d(r8063, b, MPFR_RNDN);
        mpfr_pow(r8064, r8063, r8058, MPFR_RNDN);
        mpfr_set_d(r8065, a, MPFR_RNDN);
        mpfr_mul(r8066, r8062, r8065, MPFR_RNDN);
        mpfr_mul(r8067, r8058, r8066, MPFR_RNDN);
        mpfr_mul(r8068, r8067, r8067, MPFR_RNDN);
        mpfr_sub(r8069, r8064, r8068, MPFR_RNDN);
        mpfr_mul(r8070, r8063, r8063, MPFR_RNDN);
        mpfr_add(r8071, r8070, r8067, MPFR_RNDN);
        mpfr_div(r8072, r8069, r8071, MPFR_RNDN);
        mpfr_sqrt(r8073, r8072, MPFR_RNDN);
        mpfr_add(r8074, r8073, r8063, MPFR_RNDN);
        mpfr_div(r8075, r8062, r8074, MPFR_RNDN);
        mpfr_mul(r8076, r8061, r8075, MPFR_RNDN);
        return mpfr_get_d(r8076, MPFR_RNDN);
}

static mpfr_t r8077, r8078, r8079, r8080, r8081, r8082, r8083, r8084, r8085, r8086, r8087, r8088, r8089, r8090, r8091, r8092, r8093, r8094, r8095;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8077, "4", 10, MPFR_RNDN);
        mpfr_init(r8078);
        mpfr_init_set_str(r8079, "2", 10, MPFR_RNDN);
        mpfr_init(r8080);
        mpfr_init(r8081);
        mpfr_init(r8082);
        mpfr_init(r8083);
        mpfr_init(r8084);
        mpfr_init(r8085);
        mpfr_init(r8086);
        mpfr_init(r8087);
        mpfr_init(r8088);
        mpfr_init(r8089);
        mpfr_init(r8090);
        mpfr_init(r8091);
        mpfr_init(r8092);
        mpfr_init(r8093);
        mpfr_init(r8094);
        mpfr_init(r8095);
}

double f_dm(double a, double b, double c) {
        ;
        mpfr_neg(r8078, r8077, MPFR_RNDN);
        ;
        mpfr_div(r8080, r8078, r8079, MPFR_RNDN);
        mpfr_set_d(r8081, c, MPFR_RNDN);
        mpfr_set_d(r8082, b, MPFR_RNDN);
        mpfr_pow(r8083, r8082, r8077, MPFR_RNDN);
        mpfr_set_d(r8084, a, MPFR_RNDN);
        mpfr_mul(r8085, r8081, r8084, MPFR_RNDN);
        mpfr_mul(r8086, r8077, r8085, MPFR_RNDN);
        mpfr_mul(r8087, r8086, r8086, MPFR_RNDN);
        mpfr_sub(r8088, r8083, r8087, MPFR_RNDN);
        mpfr_mul(r8089, r8082, r8082, MPFR_RNDN);
        mpfr_add(r8090, r8089, r8086, MPFR_RNDN);
        mpfr_div(r8091, r8088, r8090, MPFR_RNDN);
        mpfr_sqrt(r8092, r8091, MPFR_RNDN);
        mpfr_add(r8093, r8092, r8082, MPFR_RNDN);
        mpfr_div(r8094, r8081, r8093, MPFR_RNDN);
        mpfr_mul(r8095, r8080, r8094, MPFR_RNDN);
        return mpfr_get_d(r8095, MPFR_RNDN);
}

