#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 r54376 = x;
        float r54377 = r54376 * r54376;
        float r54378 = 3.0;
        float r54379 = 2.0;
        float r54380 = r54376 * r54379;
        float r54381 = r54378 - r54380;
        float r54382 = r54377 * r54381;
        return r54382;
}

double f_id(double x) {
        double r54383 = x;
        double r54384 = r54383 * r54383;
        double r54385 = 3.0;
        double r54386 = 2.0;
        double r54387 = r54383 * r54386;
        double r54388 = r54385 - r54387;
        double r54389 = r54384 * r54388;
        return r54389;
}


double f_of(float x) {
        float r54390 = x;
        float r54391 = r54390 * r54390;
        float r54392 = 3.0;
        float r54393 = r54391 * r54392;
        float r54394 = 2.0;
        float r54395 = -r54394;
        float r54396 = 3;
        float r54397 = pow(r54390, r54396);
        float r54398 = r54395 * r54397;
        float r54399 = r54393 + r54398;
        return r54399;
}

double f_od(double x) {
        double r54400 = x;
        double r54401 = r54400 * r54400;
        double r54402 = 3.0;
        double r54403 = r54401 * r54402;
        double r54404 = 2.0;
        double r54405 = -r54404;
        double r54406 = 3;
        double r54407 = pow(r54400, r54406);
        double r54408 = r54405 * r54407;
        double r54409 = r54403 + r54408;
        return r54409;
}

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 r54410, r54411, r54412, r54413, r54414, r54415, r54416;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r54410);
        mpfr_init(r54411);
        mpfr_init_set_str(r54412, "3.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r54413, "2.0", 10, MPFR_RNDN);
        mpfr_init(r54414);
        mpfr_init(r54415);
        mpfr_init(r54416);
}

double f_im(double x) {
        mpfr_set_d(r54410, x, MPFR_RNDN);
        mpfr_mul(r54411, r54410, r54410, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r54414, r54410, r54413, MPFR_RNDN);
        mpfr_sub(r54415, r54412, r54414, MPFR_RNDN);
        mpfr_mul(r54416, r54411, r54415, MPFR_RNDN);
        return mpfr_get_d(r54416, MPFR_RNDN);
}

static mpfr_t r54417, r54418, r54419, r54420, r54421, r54422, r54423, r54424, r54425, r54426;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54417);
        mpfr_init(r54418);
        mpfr_init_set_str(r54419, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54420);
        mpfr_init_set_str(r54421, "2.0", 10, MPFR_RNDN);
        mpfr_init(r54422);
        mpfr_init_set_str(r54423, "3", 10, MPFR_RNDN);
        mpfr_init(r54424);
        mpfr_init(r54425);
        mpfr_init(r54426);
}

double f_fm(double x) {
        mpfr_set_d(r54417, x, MPFR_RNDN);
        mpfr_mul(r54418, r54417, r54417, MPFR_RNDN);
        ;
        mpfr_mul(r54420, r54418, r54419, MPFR_RNDN);
        ;
        mpfr_neg(r54422, r54421, MPFR_RNDN);
        ;
        mpfr_pow(r54424, r54417, r54423, MPFR_RNDN);
        mpfr_mul(r54425, r54422, r54424, MPFR_RNDN);
        mpfr_add(r54426, r54420, r54425, MPFR_RNDN);
        return mpfr_get_d(r54426, MPFR_RNDN);
}

static mpfr_t r54427, r54428, r54429, r54430, r54431, r54432, r54433, r54434, r54435, r54436;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r54427);
        mpfr_init(r54428);
        mpfr_init_set_str(r54429, "3.0", 10, MPFR_RNDN);
        mpfr_init(r54430);
        mpfr_init_set_str(r54431, "2.0", 10, MPFR_RNDN);
        mpfr_init(r54432);
        mpfr_init_set_str(r54433, "3", 10, MPFR_RNDN);
        mpfr_init(r54434);
        mpfr_init(r54435);
        mpfr_init(r54436);
}

double f_dm(double x) {
        mpfr_set_d(r54427, x, MPFR_RNDN);
        mpfr_mul(r54428, r54427, r54427, MPFR_RNDN);
        ;
        mpfr_mul(r54430, r54428, r54429, MPFR_RNDN);
        ;
        mpfr_neg(r54432, r54431, MPFR_RNDN);
        ;
        mpfr_pow(r54434, r54427, r54433, MPFR_RNDN);
        mpfr_mul(r54435, r54432, r54434, MPFR_RNDN);
        mpfr_add(r54436, r54430, r54435, MPFR_RNDN);
        return mpfr_get_d(r54436, MPFR_RNDN);
}

