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

char *name = "Expanding a square";

double f_if(float x) {
        float r8006 = x;
        float r8007 = 1;
        float r8008 = r8006 + r8007;
        float r8009 = r8008 * r8008;
        float r8010 = r8009 - r8007;
        return r8010;
}

double f_id(double x) {
        double r8011 = x;
        double r8012 = 1;
        double r8013 = r8011 + r8012;
        double r8014 = r8013 * r8013;
        double r8015 = r8014 - r8012;
        return r8015;
}


double f_of(float x) {
        float r8016 = x;
        float r8017 = r8016 * r8016;
        float r8018 = r8016 + r8016;
        float r8019 = r8017 + r8018;
        return r8019;
}

double f_od(double x) {
        double r8020 = x;
        double r8021 = r8020 * r8020;
        double r8022 = r8020 + r8020;
        double r8023 = r8021 + r8022;
        return r8023;
}

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 r8024, r8025, r8026, r8027, r8028;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8024);
        mpfr_init_set_str(r8025, "1", 10, MPFR_RNDN);
        mpfr_init(r8026);
        mpfr_init(r8027);
        mpfr_init(r8028);
}

double f_im(double x) {
        mpfr_set_d(r8024, x, MPFR_RNDN);
        ;
        mpfr_add(r8026, r8024, r8025, MPFR_RNDN);
        mpfr_mul(r8027, r8026, r8026, MPFR_RNDN);
        mpfr_sub(r8028, r8027, r8025, MPFR_RNDN);
        return mpfr_get_d(r8028, MPFR_RNDN);
}

static mpfr_t r8029, r8030, r8031, r8032;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8029);
        mpfr_init(r8030);
        mpfr_init(r8031);
        mpfr_init(r8032);
}

double f_fm(double x) {
        mpfr_set_d(r8029, x, MPFR_RNDN);
        mpfr_mul(r8030, r8029, r8029, MPFR_RNDN);
        mpfr_add(r8031, r8029, r8029, MPFR_RNDN);
        mpfr_add(r8032, r8030, r8031, MPFR_RNDN);
        return mpfr_get_d(r8032, MPFR_RNDN);
}

static mpfr_t r8033, r8034, r8035, r8036;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8033);
        mpfr_init(r8034);
        mpfr_init(r8035);
        mpfr_init(r8036);
}

double f_dm(double x) {
        mpfr_set_d(r8033, x, MPFR_RNDN);
        mpfr_mul(r8034, r8033, r8033, MPFR_RNDN);
        mpfr_add(r8035, r8033, r8033, MPFR_RNDN);
        mpfr_add(r8036, r8034, r8035, MPFR_RNDN);
        return mpfr_get_d(r8036, MPFR_RNDN);
}

