#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 r9844 = b;
        float r9845 = -r9844;
        float r9846 = r9844 * r9844;
        float r9847 = 3;
        float r9848 = a;
        float r9849 = r9847 * r9848;
        float r9850 = c;
        float r9851 = r9849 * r9850;
        float r9852 = r9846 - r9851;
        float r9853 = sqrt(r9852);
        float r9854 = r9845 + r9853;
        float r9855 = r9854 / r9849;
        return r9855;
}

double f_id(double a, double b, double c, double __attribute__((unused)) d) {
        double r9856 = b;
        double r9857 = -r9856;
        double r9858 = r9856 * r9856;
        double r9859 = 3;
        double r9860 = a;
        double r9861 = r9859 * r9860;
        double r9862 = c;
        double r9863 = r9861 * r9862;
        double r9864 = r9858 - r9863;
        double r9865 = sqrt(r9864);
        double r9866 = r9857 + r9865;
        double r9867 = r9866 / r9861;
        return r9867;
}


double f_of(float a, float b, float c, float __attribute__((unused)) d) {
        float r9868 = 3;
        float r9869 = r9868 / r9868;
        float r9870 = c;
        float r9871 = b;
        float r9872 = -r9871;
        float r9873 = r9871 * r9871;
        float r9874 = r9870 * r9868;
        float r9875 = a;
        float r9876 = r9874 * r9875;
        float r9877 = r9873 - r9876;
        float r9878 = sqrt(r9877);
        float r9879 = r9872 - r9878;
        float r9880 = r9870 / r9879;
        float r9881 = r9869 * r9880;
        return r9881;
}

double f_od(double a, double b, double c, double __attribute__((unused)) d) {
        double r9882 = 3;
        double r9883 = r9882 / r9882;
        double r9884 = c;
        double r9885 = b;
        double r9886 = -r9885;
        double r9887 = r9885 * r9885;
        double r9888 = r9884 * r9882;
        double r9889 = a;
        double r9890 = r9888 * r9889;
        double r9891 = r9887 - r9890;
        double r9892 = sqrt(r9891);
        double r9893 = r9886 - r9892;
        double r9894 = r9884 / r9893;
        double r9895 = r9883 * r9894;
        return r9895;
}

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 r9896, r9897, r9898, r9899, r9900, r9901, r9902, r9903, r9904, r9905, r9906, r9907;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r9896);
        mpfr_init(r9897);
        mpfr_init(r9898);
        mpfr_init_set_str(r9899, "3", 10, MPFR_RNDN);
        mpfr_init(r9900);
        mpfr_init(r9901);
        mpfr_init(r9902);
        mpfr_init(r9903);
        mpfr_init(r9904);
        mpfr_init(r9905);
        mpfr_init(r9906);
        mpfr_init(r9907);
}

double f_im(double a, double b, double c, double __attribute__((unused)) d) {
        mpfr_set_d(r9896, b, MPFR_RNDN);
        mpfr_neg(r9897, r9896, MPFR_RNDN);
        mpfr_mul(r9898, r9896, r9896, MPFR_RNDN);
        ;
        mpfr_set_d(r9900, a, MPFR_RNDN);
        mpfr_mul(r9901, r9899, r9900, MPFR_RNDN);
        mpfr_set_d(r9902, c, MPFR_RNDN);
        mpfr_mul(r9903, r9901, r9902, MPFR_RNDN);
        mpfr_sub(r9904, r9898, r9903, MPFR_RNDN);
        mpfr_sqrt(r9905, r9904, MPFR_RNDN);
        mpfr_add(r9906, r9897, r9905, MPFR_RNDN);
        mpfr_div(r9907, r9906, r9901, MPFR_RNDN);
        return mpfr_get_d(r9907, MPFR_RNDN);
}

static mpfr_t r9908, r9909, r9910, r9911, r9912, r9913, r9914, r9915, r9916, r9917, r9918, r9919, r9920, r9921;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r9908, "3", 10, MPFR_RNDN);
        mpfr_init(r9909);
        mpfr_init(r9910);
        mpfr_init(r9911);
        mpfr_init(r9912);
        mpfr_init(r9913);
        mpfr_init(r9914);
        mpfr_init(r9915);
        mpfr_init(r9916);
        mpfr_init(r9917);
        mpfr_init(r9918);
        mpfr_init(r9919);
        mpfr_init(r9920);
        mpfr_init(r9921);
}

double f_fm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r9909, r9908, r9908, MPFR_RNDN);
        mpfr_set_d(r9910, c, MPFR_RNDN);
        mpfr_set_d(r9911, b, MPFR_RNDN);
        mpfr_neg(r9912, r9911, MPFR_RNDN);
        mpfr_mul(r9913, r9911, r9911, MPFR_RNDN);
        mpfr_mul(r9914, r9910, r9908, MPFR_RNDN);
        mpfr_set_d(r9915, a, MPFR_RNDN);
        mpfr_mul(r9916, r9914, r9915, MPFR_RNDN);
        mpfr_sub(r9917, r9913, r9916, MPFR_RNDN);
        mpfr_sqrt(r9918, r9917, MPFR_RNDN);
        mpfr_sub(r9919, r9912, r9918, MPFR_RNDN);
        mpfr_div(r9920, r9910, r9919, MPFR_RNDN);
        mpfr_mul(r9921, r9909, r9920, MPFR_RNDN);
        return mpfr_get_d(r9921, MPFR_RNDN);
}

static mpfr_t r9922, r9923, r9924, r9925, r9926, r9927, r9928, r9929, r9930, r9931, r9932, r9933, r9934, r9935;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r9922, "3", 10, MPFR_RNDN);
        mpfr_init(r9923);
        mpfr_init(r9924);
        mpfr_init(r9925);
        mpfr_init(r9926);
        mpfr_init(r9927);
        mpfr_init(r9928);
        mpfr_init(r9929);
        mpfr_init(r9930);
        mpfr_init(r9931);
        mpfr_init(r9932);
        mpfr_init(r9933);
        mpfr_init(r9934);
        mpfr_init(r9935);
}

double f_dm(double a, double b, double c, double __attribute__((unused)) d) {
        ;
        mpfr_div(r9923, r9922, r9922, MPFR_RNDN);
        mpfr_set_d(r9924, c, MPFR_RNDN);
        mpfr_set_d(r9925, b, MPFR_RNDN);
        mpfr_neg(r9926, r9925, MPFR_RNDN);
        mpfr_mul(r9927, r9925, r9925, MPFR_RNDN);
        mpfr_mul(r9928, r9924, r9922, MPFR_RNDN);
        mpfr_set_d(r9929, a, MPFR_RNDN);
        mpfr_mul(r9930, r9928, r9929, MPFR_RNDN);
        mpfr_sub(r9931, r9927, r9930, MPFR_RNDN);
        mpfr_sqrt(r9932, r9931, MPFR_RNDN);
        mpfr_sub(r9933, r9926, r9932, MPFR_RNDN);
        mpfr_div(r9934, r9924, r9933, MPFR_RNDN);
        mpfr_mul(r9935, r9923, r9934, MPFR_RNDN);
        return mpfr_get_d(r9935, MPFR_RNDN);
}

