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

char *name = "Linear.V3:cross from linear-1.19.1.3";

double f_if(float x, float y, float z, float t) {
        float r29400 = x;
        float r29401 = y;
        float r29402 = r29400 * r29401;
        float r29403 = z;
        float r29404 = t;
        float r29405 = r29403 * r29404;
        float r29406 = r29402 - r29405;
        return r29406;
}

double f_id(double x, double y, double z, double t) {
        double r29407 = x;
        double r29408 = y;
        double r29409 = r29407 * r29408;
        double r29410 = z;
        double r29411 = t;
        double r29412 = r29410 * r29411;
        double r29413 = r29409 - r29412;
        return r29413;
}


double f_of(float x, float y, float z, float t) {
        float r29414 = x;
        float r29415 = y;
        float r29416 = r29414 * r29415;
        float r29417 = z;
        float r29418 = t;
        float r29419 = r29417 * r29418;
        float r29420 = r29416 - r29419;
        return r29420;
}

double f_od(double x, double y, double z, double t) {
        double r29421 = x;
        double r29422 = y;
        double r29423 = r29421 * r29422;
        double r29424 = z;
        double r29425 = t;
        double r29426 = r29424 * r29425;
        double r29427 = r29423 - r29426;
        return r29427;
}

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 r29428, r29429, r29430, r29431, r29432, r29433, r29434;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r29428);
        mpfr_init(r29429);
        mpfr_init(r29430);
        mpfr_init(r29431);
        mpfr_init(r29432);
        mpfr_init(r29433);
        mpfr_init(r29434);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r29428, x, MPFR_RNDN);
        mpfr_set_d(r29429, y, MPFR_RNDN);
        mpfr_mul(r29430, r29428, r29429, MPFR_RNDN);
        mpfr_set_d(r29431, z, MPFR_RNDN);
        mpfr_set_d(r29432, t, MPFR_RNDN);
        mpfr_mul(r29433, r29431, r29432, MPFR_RNDN);
        mpfr_sub(r29434, r29430, r29433, MPFR_RNDN);
        return mpfr_get_d(r29434, MPFR_RNDN);
}

static mpfr_t r29435, r29436, r29437, r29438, r29439, r29440, r29441;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r29435);
        mpfr_init(r29436);
        mpfr_init(r29437);
        mpfr_init(r29438);
        mpfr_init(r29439);
        mpfr_init(r29440);
        mpfr_init(r29441);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r29435, x, MPFR_RNDN);
        mpfr_set_d(r29436, y, MPFR_RNDN);
        mpfr_mul(r29437, r29435, r29436, MPFR_RNDN);
        mpfr_set_d(r29438, z, MPFR_RNDN);
        mpfr_set_d(r29439, t, MPFR_RNDN);
        mpfr_mul(r29440, r29438, r29439, MPFR_RNDN);
        mpfr_sub(r29441, r29437, r29440, MPFR_RNDN);
        return mpfr_get_d(r29441, MPFR_RNDN);
}

static mpfr_t r29442, r29443, r29444, r29445, r29446, r29447, r29448;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r29442);
        mpfr_init(r29443);
        mpfr_init(r29444);
        mpfr_init(r29445);
        mpfr_init(r29446);
        mpfr_init(r29447);
        mpfr_init(r29448);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r29442, x, MPFR_RNDN);
        mpfr_set_d(r29443, y, MPFR_RNDN);
        mpfr_mul(r29444, r29442, r29443, MPFR_RNDN);
        mpfr_set_d(r29445, z, MPFR_RNDN);
        mpfr_set_d(r29446, t, MPFR_RNDN);
        mpfr_mul(r29447, r29445, r29446, MPFR_RNDN);
        mpfr_sub(r29448, r29444, r29447, MPFR_RNDN);
        return mpfr_get_d(r29448, MPFR_RNDN);
}

