#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 r54360 = x;
        float r54361 = r54360 * r54360;
        float r54362 = 3.0f;
        float r54363 = 2.0f;
        float r54364 = r54360 * r54363;
        float r54365 = r54362 - r54364;
        float r54366 = r54361 * r54365;
        return r54366;
}

double f_id(double x) {
        double r54367 = x;
        double r54368 = r54367 * r54367;
        double r54369 = 3.0;
        double r54370 = 2.0;
        double r54371 = r54367 * r54370;
        double r54372 = r54369 - r54371;
        double r54373 = r54368 * r54372;
        return r54373;
}


double f_of(float x) {
        float r54374 = x;
        float r54375 = 3.0f;
        float r54376 = 2.0f;
        float r54377 = r54374 * r54376;
        float r54378 = r54375 - r54377;
        float r54379 = r54374 * r54378;
        float r54380 = r54374 * r54379;
        return r54380;
}

double f_od(double x) {
        double r54381 = x;
        double r54382 = 3.0;
        double r54383 = 2.0;
        double r54384 = r54381 * r54383;
        double r54385 = r54382 - r54384;
        double r54386 = r54381 * r54385;
        double r54387 = r54381 * r54386;
        return r54387;
}

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 r54388, r54389, r54390, r54391, r54392, r54393, r54394;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r54388);
        mpfr_init(r54389);
        mpfr_init_set_str(r54390, "3.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r54391, "2.0", 10, MPFR_RNDN);
        mpfr_init(r54392);
        mpfr_init(r54393);
        mpfr_init(r54394);
}

double f_im(double x) {
        mpfr_set_d(r54388, x, MPFR_RNDN);
        mpfr_mul(r54389, r54388, r54388, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r54392, r54388, r54391, MPFR_RNDN);
        mpfr_sub(r54393, r54390, r54392, MPFR_RNDN);
        mpfr_mul(r54394, r54389, r54393, MPFR_RNDN);
        return mpfr_get_d(r54394, MPFR_RNDN);
}

static mpfr_t r54395, r54396, r54397, r54398, r54399, r54400, r54401;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r54395);
        mpfr_init_set_str(r54396, "3.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r54397, "2.0", 10, MPFR_RNDN);
        mpfr_init(r54398);
        mpfr_init(r54399);
        mpfr_init(r54400);
        mpfr_init(r54401);
}

double f_fm(double x) {
        mpfr_set_d(r54395, x, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r54398, r54395, r54397, MPFR_RNDN);
        mpfr_sub(r54399, r54396, r54398, MPFR_RNDN);
        mpfr_mul(r54400, r54395, r54399, MPFR_RNDN);
        mpfr_mul(r54401, r54395, r54400, MPFR_RNDN);
        return mpfr_get_d(r54401, MPFR_RNDN);
}

static mpfr_t r54402, r54403, r54404, r54405, r54406, r54407, r54408;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r54402);
        mpfr_init_set_str(r54403, "3.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r54404, "2.0", 10, MPFR_RNDN);
        mpfr_init(r54405);
        mpfr_init(r54406);
        mpfr_init(r54407);
        mpfr_init(r54408);
}

double f_dm(double x) {
        mpfr_set_d(r54402, x, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r54405, r54402, r54404, MPFR_RNDN);
        mpfr_sub(r54406, r54403, r54405, MPFR_RNDN);
        mpfr_mul(r54407, r54402, r54406, MPFR_RNDN);
        mpfr_mul(r54408, r54402, r54407, MPFR_RNDN);
        return mpfr_get_d(r54408, MPFR_RNDN);
}

