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

char *name = "Data.Spline.Key:interpolateKeys from smoothie-0.4.0.2";

double f_if(float x) {
        float r55777 = x;
        float r55778 = r55777 * r55777;
        float r55779 = 3.0;
        float r55780 = 2.0;
        float r55781 = r55777 * r55780;
        float r55782 = r55779 - r55781;
        float r55783 = r55778 * r55782;
        return r55783;
}

double f_id(double x) {
        double r55784 = x;
        double r55785 = r55784 * r55784;
        double r55786 = 3.0;
        double r55787 = 2.0;
        double r55788 = r55784 * r55787;
        double r55789 = r55786 - r55788;
        double r55790 = r55785 * r55789;
        return r55790;
}


double f_of(float x) {
        float r55791 = x;
        float r55792 = r55791 * r55791;
        float r55793 = 3.0;
        float r55794 = r55792 * r55793;
        float r55795 = 2.0;
        float r55796 = -r55795;
        float r55797 = 3;
        float r55798 = pow(r55791, r55797);
        float r55799 = r55796 * r55798;
        float r55800 = r55794 + r55799;
        return r55800;
}

double f_od(double x) {
        double r55801 = x;
        double r55802 = r55801 * r55801;
        double r55803 = 3.0;
        double r55804 = r55802 * r55803;
        double r55805 = 2.0;
        double r55806 = -r55805;
        double r55807 = 3;
        double r55808 = pow(r55801, r55807);
        double r55809 = r55806 * r55808;
        double r55810 = r55804 + r55809;
        return r55810;
}

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 r55811, r55812, r55813, r55814, r55815, r55816, r55817;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r55811);
        mpfr_init(r55812);
        mpfr_init_set_str(r55813, "3.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r55814, "2.0", 10, MPFR_RNDN);
        mpfr_init(r55815);
        mpfr_init(r55816);
        mpfr_init(r55817);
}

double f_im(double x) {
        mpfr_set_d(r55811, x, MPFR_RNDN);
        mpfr_mul(r55812, r55811, r55811, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r55815, r55811, r55814, MPFR_RNDN);
        mpfr_sub(r55816, r55813, r55815, MPFR_RNDN);
        mpfr_mul(r55817, r55812, r55816, MPFR_RNDN);
        return mpfr_get_d(r55817, MPFR_RNDN);
}

static mpfr_t r55818, r55819, r55820, r55821, r55822, r55823, r55824, r55825, r55826, r55827;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55818);
        mpfr_init(r55819);
        mpfr_init_set_str(r55820, "3.0", 10, MPFR_RNDN);
        mpfr_init(r55821);
        mpfr_init_set_str(r55822, "2.0", 10, MPFR_RNDN);
        mpfr_init(r55823);
        mpfr_init_set_str(r55824, "3", 10, MPFR_RNDN);
        mpfr_init(r55825);
        mpfr_init(r55826);
        mpfr_init(r55827);
}

double f_fm(double x) {
        mpfr_set_d(r55818, x, MPFR_RNDN);
        mpfr_mul(r55819, r55818, r55818, MPFR_RNDN);
        ;
        mpfr_mul(r55821, r55819, r55820, MPFR_RNDN);
        ;
        mpfr_neg(r55823, r55822, MPFR_RNDN);
        ;
        mpfr_pow(r55825, r55818, r55824, MPFR_RNDN);
        mpfr_mul(r55826, r55823, r55825, MPFR_RNDN);
        mpfr_add(r55827, r55821, r55826, MPFR_RNDN);
        return mpfr_get_d(r55827, MPFR_RNDN);
}

static mpfr_t r55828, r55829, r55830, r55831, r55832, r55833, r55834, r55835, r55836, r55837;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55828);
        mpfr_init(r55829);
        mpfr_init_set_str(r55830, "3.0", 10, MPFR_RNDN);
        mpfr_init(r55831);
        mpfr_init_set_str(r55832, "2.0", 10, MPFR_RNDN);
        mpfr_init(r55833);
        mpfr_init_set_str(r55834, "3", 10, MPFR_RNDN);
        mpfr_init(r55835);
        mpfr_init(r55836);
        mpfr_init(r55837);
}

double f_dm(double x) {
        mpfr_set_d(r55828, x, MPFR_RNDN);
        mpfr_mul(r55829, r55828, r55828, MPFR_RNDN);
        ;
        mpfr_mul(r55831, r55829, r55830, MPFR_RNDN);
        ;
        mpfr_neg(r55833, r55832, MPFR_RNDN);
        ;
        mpfr_pow(r55835, r55828, r55834, MPFR_RNDN);
        mpfr_mul(r55836, r55833, r55835, MPFR_RNDN);
        mpfr_add(r55837, r55831, r55836, MPFR_RNDN);
        return mpfr_get_d(r55837, MPFR_RNDN);
}

