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

char *name = "Cubic critical, wide range";

double f_if(float a, float b, float c, float __attribute__((unused)) d) {
        float r25865 = b;
        float r25866 = -r25865;
        float r25867 = r25865 * r25865;
        float r25868 = 3;
        float r25869 = a;
        float r25870 = r25868 * r25869;
        float r25871 = c;
        float r25872 = r25870 * r25871;
        float r25873 = r25867 - r25872;
        float r25874 = sqrt(r25873);
        float r25875 = r25866 + r25874;
        float r25876 = r25875 / r25870;
        return r25876;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r25877 = b;
        double r25878 = -r25877;
        double r25879 = r25877 * r25877;
        double r25880 = 3;
        double r25881 = a;
        double r25882 = r25880 * r25881;
        double r25883 = c;
        double r25884 = r25882 * r25883;
        double r25885 = r25879 - r25884;
        double r25886 = sqrt(r25885);
        double r25887 = r25878 + r25886;
        double r25888 = r25887 / r25882;
        return r25888;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r25889 = b;
        float r25890 = -r25889;
        float r25891 = r25889 * r25889;
        float r25892 = 3;
        float r25893 = a;
        float r25894 = r25892 * r25893;
        float r25895 = c;
        float r25896 = r25894 * r25895;
        float r25897 = r25891 - r25896;
        float r25898 = sqrt(r25897);
        float r25899 = r25890 + r25898;
        float r25900 = r25899 / r25894;
        return r25900;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r25901 = b;
        double r25902 = -r25901;
        double r25903 = r25901 * r25901;
        double r25904 = 3;
        double r25905 = a;
        double r25906 = r25904 * r25905;
        double r25907 = c;
        double r25908 = r25906 * r25907;
        double r25909 = r25903 - r25908;
        double r25910 = sqrt(r25909);
        double r25911 = r25902 + r25910;
        double r25912 = r25911 / r25906;
        return r25912;
}

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 r25913, r25914, r25915, r25916, r25917, r25918, r25919, r25920, r25921, r25922, r25923, r25924;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r25913);
        mpfr_init(r25914);
        mpfr_init(r25915);
        mpfr_init_set_str(r25916, "3", 10, MPFR_RNDN);
        mpfr_init(r25917);
        mpfr_init(r25918);
        mpfr_init(r25919);
        mpfr_init(r25920);
        mpfr_init(r25921);
        mpfr_init(r25922);
        mpfr_init(r25923);
        mpfr_init(r25924);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r25913, b, MPFR_RNDN);
        mpfr_neg(r25914, r25913, MPFR_RNDN);
        mpfr_mul(r25915, r25913, r25913, MPFR_RNDN);
        ;
        mpfr_set_d(r25917, a, MPFR_RNDN);
        mpfr_mul(r25918, r25916, r25917, MPFR_RNDN);
        mpfr_set_d(r25919, c, MPFR_RNDN);
        mpfr_mul(r25920, r25918, r25919, MPFR_RNDN);
        mpfr_sub(r25921, r25915, r25920, MPFR_RNDN);
        mpfr_sqrt(r25922, r25921, MPFR_RNDN);
        mpfr_add(r25923, r25914, r25922, MPFR_RNDN);
        mpfr_div(r25924, r25923, r25918, MPFR_RNDN);
        return mpfr_get_d(r25924, MPFR_RNDN);
}

static mpfr_t r25925, r25926, r25927, r25928, r25929, r25930, r25931, r25932, r25933, r25934, r25935, r25936;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init(r25925);
        mpfr_init(r25926);
        mpfr_init(r25927);
        mpfr_init_set_str(r25928, "3", 10, MPFR_RNDN);
        mpfr_init(r25929);
        mpfr_init(r25930);
        mpfr_init(r25931);
        mpfr_init(r25932);
        mpfr_init(r25933);
        mpfr_init(r25934);
        mpfr_init(r25935);
        mpfr_init(r25936);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r25925, b, MPFR_RNDN);
        mpfr_neg(r25926, r25925, MPFR_RNDN);
        mpfr_mul(r25927, r25925, r25925, MPFR_RNDN);
        ;
        mpfr_set_d(r25929, a, MPFR_RNDN);
        mpfr_mul(r25930, r25928, r25929, MPFR_RNDN);
        mpfr_set_d(r25931, c, MPFR_RNDN);
        mpfr_mul(r25932, r25930, r25931, MPFR_RNDN);
        mpfr_sub(r25933, r25927, r25932, MPFR_RNDN);
        mpfr_sqrt(r25934, r25933, MPFR_RNDN);
        mpfr_add(r25935, r25926, r25934, MPFR_RNDN);
        mpfr_div(r25936, r25935, r25930, MPFR_RNDN);
        return mpfr_get_d(r25936, MPFR_RNDN);
}

static mpfr_t r25937, r25938, r25939, r25940, r25941, r25942, r25943, r25944, r25945, r25946, r25947, r25948;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init(r25937);
        mpfr_init(r25938);
        mpfr_init(r25939);
        mpfr_init_set_str(r25940, "3", 10, MPFR_RNDN);
        mpfr_init(r25941);
        mpfr_init(r25942);
        mpfr_init(r25943);
        mpfr_init(r25944);
        mpfr_init(r25945);
        mpfr_init(r25946);
        mpfr_init(r25947);
        mpfr_init(r25948);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r25937, b, MPFR_RNDN);
        mpfr_neg(r25938, r25937, MPFR_RNDN);
        mpfr_mul(r25939, r25937, r25937, MPFR_RNDN);
        ;
        mpfr_set_d(r25941, a, MPFR_RNDN);
        mpfr_mul(r25942, r25940, r25941, MPFR_RNDN);
        mpfr_set_d(r25943, c, MPFR_RNDN);
        mpfr_mul(r25944, r25942, r25943, MPFR_RNDN);
        mpfr_sub(r25945, r25939, r25944, MPFR_RNDN);
        mpfr_sqrt(r25946, r25945, MPFR_RNDN);
        mpfr_add(r25947, r25938, r25946, MPFR_RNDN);
        mpfr_div(r25948, r25947, r25942, MPFR_RNDN);
        return mpfr_get_d(r25948, MPFR_RNDN);
}

