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

char *name = "Linear.Quaternion:$c/ from linear-1.19.1.3, E";

double f_if(float x, float y) {
        float r47345 = x;
        float r47346 = r47345 * r47345;
        float r47347 = y;
        float r47348 = r47347 * r47347;
        float r47349 = r47346 + r47348;
        float r47350 = r47349 + r47348;
        float r47351 = r47350 + r47348;
        return r47351;
}

double f_id(double x, double y) {
        double r47352 = x;
        double r47353 = r47352 * r47352;
        double r47354 = y;
        double r47355 = r47354 * r47354;
        double r47356 = r47353 + r47355;
        double r47357 = r47356 + r47355;
        double r47358 = r47357 + r47355;
        return r47358;
}


double f_of(float x, float y) {
        float r47359 = x;
        float r47360 = r47359 * r47359;
        float r47361 = y;
        float r47362 = r47361 * r47361;
        float r47363 = r47360 + r47362;
        float r47364 = r47363 + r47362;
        float r47365 = r47364 + r47362;
        return r47365;
}

double f_od(double x, double y) {
        double r47366 = x;
        double r47367 = r47366 * r47366;
        double r47368 = y;
        double r47369 = r47368 * r47368;
        double r47370 = r47367 + r47369;
        double r47371 = r47370 + r47369;
        double r47372 = r47371 + r47369;
        return r47372;
}

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 r47373, r47374, r47375, r47376, r47377, r47378, r47379;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47373);
        mpfr_init(r47374);
        mpfr_init(r47375);
        mpfr_init(r47376);
        mpfr_init(r47377);
        mpfr_init(r47378);
        mpfr_init(r47379);
}

double f_im(double x, double y) {
        mpfr_set_d(r47373, x, MPFR_RNDN);
        mpfr_mul(r47374, r47373, r47373, MPFR_RNDN);
        mpfr_set_d(r47375, y, MPFR_RNDN);
        mpfr_mul(r47376, r47375, r47375, MPFR_RNDN);
        mpfr_add(r47377, r47374, r47376, MPFR_RNDN);
        mpfr_add(r47378, r47377, r47376, MPFR_RNDN);
        mpfr_add(r47379, r47378, r47376, MPFR_RNDN);
        return mpfr_get_d(r47379, MPFR_RNDN);
}

static mpfr_t r47380, r47381, r47382, r47383, r47384, r47385, r47386;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47380);
        mpfr_init(r47381);
        mpfr_init(r47382);
        mpfr_init(r47383);
        mpfr_init(r47384);
        mpfr_init(r47385);
        mpfr_init(r47386);
}

double f_fm(double x, double y) {
        mpfr_set_d(r47380, x, MPFR_RNDN);
        mpfr_mul(r47381, r47380, r47380, MPFR_RNDN);
        mpfr_set_d(r47382, y, MPFR_RNDN);
        mpfr_mul(r47383, r47382, r47382, MPFR_RNDN);
        mpfr_add(r47384, r47381, r47383, MPFR_RNDN);
        mpfr_add(r47385, r47384, r47383, MPFR_RNDN);
        mpfr_add(r47386, r47385, r47383, MPFR_RNDN);
        return mpfr_get_d(r47386, MPFR_RNDN);
}

static mpfr_t r47387, r47388, r47389, r47390, r47391, r47392, r47393;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47387);
        mpfr_init(r47388);
        mpfr_init(r47389);
        mpfr_init(r47390);
        mpfr_init(r47391);
        mpfr_init(r47392);
        mpfr_init(r47393);
}

double f_dm(double x, double y) {
        mpfr_set_d(r47387, x, MPFR_RNDN);
        mpfr_mul(r47388, r47387, r47387, MPFR_RNDN);
        mpfr_set_d(r47389, y, MPFR_RNDN);
        mpfr_mul(r47390, r47389, r47389, MPFR_RNDN);
        mpfr_add(r47391, r47388, r47390, MPFR_RNDN);
        mpfr_add(r47392, r47391, r47390, MPFR_RNDN);
        mpfr_add(r47393, r47392, r47390, MPFR_RNDN);
        return mpfr_get_d(r47393, MPFR_RNDN);
}

