#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 r55493 = x;
        float r55494 = r55493 * r55493;
        float r55495 = 3.0;
        float r55496 = 2.0;
        float r55497 = r55493 * r55496;
        float r55498 = r55495 - r55497;
        float r55499 = r55494 * r55498;
        return r55499;
}

double f_id(double x) {
        double r55500 = x;
        double r55501 = r55500 * r55500;
        double r55502 = 3.0;
        double r55503 = 2.0;
        double r55504 = r55500 * r55503;
        double r55505 = r55502 - r55504;
        double r55506 = r55501 * r55505;
        return r55506;
}


double f_of(float x) {
        float r55507 = x;
        float r55508 = r55507 * r55507;
        float r55509 = 3.0;
        float r55510 = r55508 * r55509;
        float r55511 = 2.0;
        float r55512 = -r55511;
        float r55513 = 3;
        float r55514 = pow(r55507, r55513);
        float r55515 = r55512 * r55514;
        float r55516 = r55510 + r55515;
        return r55516;
}

double f_od(double x) {
        double r55517 = x;
        double r55518 = r55517 * r55517;
        double r55519 = 3.0;
        double r55520 = r55518 * r55519;
        double r55521 = 2.0;
        double r55522 = -r55521;
        double r55523 = 3;
        double r55524 = pow(r55517, r55523);
        double r55525 = r55522 * r55524;
        double r55526 = r55520 + r55525;
        return r55526;
}

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 r55527, r55528, r55529, r55530, r55531, r55532, r55533;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r55527);
        mpfr_init(r55528);
        mpfr_init_set_str(r55529, "3.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r55530, "2.0", 10, MPFR_RNDN);
        mpfr_init(r55531);
        mpfr_init(r55532);
        mpfr_init(r55533);
}

double f_im(double x) {
        mpfr_set_d(r55527, x, MPFR_RNDN);
        mpfr_mul(r55528, r55527, r55527, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r55531, r55527, r55530, MPFR_RNDN);
        mpfr_sub(r55532, r55529, r55531, MPFR_RNDN);
        mpfr_mul(r55533, r55528, r55532, MPFR_RNDN);
        return mpfr_get_d(r55533, MPFR_RNDN);
}

static mpfr_t r55534, r55535, r55536, r55537, r55538, r55539, r55540, r55541, r55542, r55543;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55534);
        mpfr_init(r55535);
        mpfr_init_set_str(r55536, "3.0", 10, MPFR_RNDN);
        mpfr_init(r55537);
        mpfr_init_set_str(r55538, "2.0", 10, MPFR_RNDN);
        mpfr_init(r55539);
        mpfr_init_set_str(r55540, "3", 10, MPFR_RNDN);
        mpfr_init(r55541);
        mpfr_init(r55542);
        mpfr_init(r55543);
}

double f_fm(double x) {
        mpfr_set_d(r55534, x, MPFR_RNDN);
        mpfr_mul(r55535, r55534, r55534, MPFR_RNDN);
        ;
        mpfr_mul(r55537, r55535, r55536, MPFR_RNDN);
        ;
        mpfr_neg(r55539, r55538, MPFR_RNDN);
        ;
        mpfr_pow(r55541, r55534, r55540, MPFR_RNDN);
        mpfr_mul(r55542, r55539, r55541, MPFR_RNDN);
        mpfr_add(r55543, r55537, r55542, MPFR_RNDN);
        return mpfr_get_d(r55543, MPFR_RNDN);
}

static mpfr_t r55544, r55545, r55546, r55547, r55548, r55549, r55550, r55551, r55552, r55553;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55544);
        mpfr_init(r55545);
        mpfr_init_set_str(r55546, "3.0", 10, MPFR_RNDN);
        mpfr_init(r55547);
        mpfr_init_set_str(r55548, "2.0", 10, MPFR_RNDN);
        mpfr_init(r55549);
        mpfr_init_set_str(r55550, "3", 10, MPFR_RNDN);
        mpfr_init(r55551);
        mpfr_init(r55552);
        mpfr_init(r55553);
}

double f_dm(double x) {
        mpfr_set_d(r55544, x, MPFR_RNDN);
        mpfr_mul(r55545, r55544, r55544, MPFR_RNDN);
        ;
        mpfr_mul(r55547, r55545, r55546, MPFR_RNDN);
        ;
        mpfr_neg(r55549, r55548, MPFR_RNDN);
        ;
        mpfr_pow(r55551, r55544, r55550, MPFR_RNDN);
        mpfr_mul(r55552, r55549, r55551, MPFR_RNDN);
        mpfr_add(r55553, r55547, r55552, MPFR_RNDN);
        return mpfr_get_d(r55553, MPFR_RNDN);
}

