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

char *name = "Linear.Quaternion:$cexp from linear-1.19.1.3";

double f_if(float x, float y) {
        float r29413 = x;
        float r29414 = y;
        float r29415 = sin(r29414);
        float r29416 = r29415 / r29414;
        float r29417 = r29413 * r29416;
        return r29417;
}

double f_id(double x, double y) {
        double r29418 = x;
        double r29419 = y;
        double r29420 = sin(r29419);
        double r29421 = r29420 / r29419;
        double r29422 = r29418 * r29421;
        return r29422;
}


double f_of(float x, float y) {
        float r29423 = x;
        float r29424 = y;
        float r29425 = sin(r29424);
        float r29426 = r29425 / r29424;
        float r29427 = r29423 * r29426;
        return r29427;
}

double f_od(double x, double y) {
        double r29428 = x;
        double r29429 = y;
        double r29430 = sin(r29429);
        double r29431 = r29430 / r29429;
        double r29432 = r29428 * r29431;
        return r29432;
}

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 r29433, r29434, r29435, r29436, r29437;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r29433);
        mpfr_init(r29434);
        mpfr_init(r29435);
        mpfr_init(r29436);
        mpfr_init(r29437);
}

double f_im(double x, double y) {
        mpfr_set_d(r29433, x, MPFR_RNDN);
        mpfr_set_d(r29434, y, MPFR_RNDN);
        mpfr_sin(r29435, r29434, MPFR_RNDN);
        mpfr_div(r29436, r29435, r29434, MPFR_RNDN);
        mpfr_mul(r29437, r29433, r29436, MPFR_RNDN);
        return mpfr_get_d(r29437, MPFR_RNDN);
}

static mpfr_t r29438, r29439, r29440, r29441, r29442;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r29438);
        mpfr_init(r29439);
        mpfr_init(r29440);
        mpfr_init(r29441);
        mpfr_init(r29442);
}

double f_fm(double x, double y) {
        mpfr_set_d(r29438, x, MPFR_RNDN);
        mpfr_set_d(r29439, y, MPFR_RNDN);
        mpfr_sin(r29440, r29439, MPFR_RNDN);
        mpfr_div(r29441, r29440, r29439, MPFR_RNDN);
        mpfr_mul(r29442, r29438, r29441, MPFR_RNDN);
        return mpfr_get_d(r29442, MPFR_RNDN);
}

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

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

double f_dm(double x, double y) {
        mpfr_set_d(r29443, x, MPFR_RNDN);
        mpfr_set_d(r29444, y, MPFR_RNDN);
        mpfr_sin(r29445, r29444, MPFR_RNDN);
        mpfr_div(r29446, r29445, r29444, MPFR_RNDN);
        mpfr_mul(r29447, r29443, r29446, MPFR_RNDN);
        return mpfr_get_d(r29447, MPFR_RNDN);
}

