#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 r55629 = x;
        float r55630 = r55629 * r55629;
        float r55631 = 3.0;
        float r55632 = 2.0;
        float r55633 = r55629 * r55632;
        float r55634 = r55631 - r55633;
        float r55635 = r55630 * r55634;
        return r55635;
}

double f_id(double x) {
        double r55636 = x;
        double r55637 = r55636 * r55636;
        double r55638 = 3.0;
        double r55639 = 2.0;
        double r55640 = r55636 * r55639;
        double r55641 = r55638 - r55640;
        double r55642 = r55637 * r55641;
        return r55642;
}


double f_of(float x) {
        float r55643 = x;
        float r55644 = r55643 * r55643;
        float r55645 = 3.0;
        float r55646 = r55644 * r55645;
        float r55647 = 2.0;
        float r55648 = -r55647;
        float r55649 = 3;
        float r55650 = pow(r55643, r55649);
        float r55651 = r55648 * r55650;
        float r55652 = r55646 + r55651;
        return r55652;
}

double f_od(double x) {
        double r55653 = x;
        double r55654 = r55653 * r55653;
        double r55655 = 3.0;
        double r55656 = r55654 * r55655;
        double r55657 = 2.0;
        double r55658 = -r55657;
        double r55659 = 3;
        double r55660 = pow(r55653, r55659);
        double r55661 = r55658 * r55660;
        double r55662 = r55656 + r55661;
        return r55662;
}

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 r55663, r55664, r55665, r55666, r55667, r55668, r55669;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r55663);
        mpfr_init(r55664);
        mpfr_init_set_str(r55665, "3.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r55666, "2.0", 10, MPFR_RNDN);
        mpfr_init(r55667);
        mpfr_init(r55668);
        mpfr_init(r55669);
}

double f_im(double x) {
        mpfr_set_d(r55663, x, MPFR_RNDN);
        mpfr_mul(r55664, r55663, r55663, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r55667, r55663, r55666, MPFR_RNDN);
        mpfr_sub(r55668, r55665, r55667, MPFR_RNDN);
        mpfr_mul(r55669, r55664, r55668, MPFR_RNDN);
        return mpfr_get_d(r55669, MPFR_RNDN);
}

static mpfr_t r55670, r55671, r55672, r55673, r55674, r55675, r55676, r55677, r55678, r55679;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55670);
        mpfr_init(r55671);
        mpfr_init_set_str(r55672, "3.0", 10, MPFR_RNDN);
        mpfr_init(r55673);
        mpfr_init_set_str(r55674, "2.0", 10, MPFR_RNDN);
        mpfr_init(r55675);
        mpfr_init_set_str(r55676, "3", 10, MPFR_RNDN);
        mpfr_init(r55677);
        mpfr_init(r55678);
        mpfr_init(r55679);
}

double f_fm(double x) {
        mpfr_set_d(r55670, x, MPFR_RNDN);
        mpfr_mul(r55671, r55670, r55670, MPFR_RNDN);
        ;
        mpfr_mul(r55673, r55671, r55672, MPFR_RNDN);
        ;
        mpfr_neg(r55675, r55674, MPFR_RNDN);
        ;
        mpfr_pow(r55677, r55670, r55676, MPFR_RNDN);
        mpfr_mul(r55678, r55675, r55677, MPFR_RNDN);
        mpfr_add(r55679, r55673, r55678, MPFR_RNDN);
        return mpfr_get_d(r55679, MPFR_RNDN);
}

static mpfr_t r55680, r55681, r55682, r55683, r55684, r55685, r55686, r55687, r55688, r55689;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55680);
        mpfr_init(r55681);
        mpfr_init_set_str(r55682, "3.0", 10, MPFR_RNDN);
        mpfr_init(r55683);
        mpfr_init_set_str(r55684, "2.0", 10, MPFR_RNDN);
        mpfr_init(r55685);
        mpfr_init_set_str(r55686, "3", 10, MPFR_RNDN);
        mpfr_init(r55687);
        mpfr_init(r55688);
        mpfr_init(r55689);
}

double f_dm(double x) {
        mpfr_set_d(r55680, x, MPFR_RNDN);
        mpfr_mul(r55681, r55680, r55680, MPFR_RNDN);
        ;
        mpfr_mul(r55683, r55681, r55682, MPFR_RNDN);
        ;
        mpfr_neg(r55685, r55684, MPFR_RNDN);
        ;
        mpfr_pow(r55687, r55680, r55686, MPFR_RNDN);
        mpfr_mul(r55688, r55685, r55687, MPFR_RNDN);
        mpfr_add(r55689, r55683, r55688, MPFR_RNDN);
        return mpfr_get_d(r55689, MPFR_RNDN);
}

