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

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

double f_if(float x, float y) {
        float r47476 = x;
        float r47477 = sin(r47476);
        float r47478 = y;
        float r47479 = sinh(r47478);
        float r47480 = r47477 * r47479;
        float r47481 = r47480 / r47476;
        return r47481;
}

double f_id(double x, double y) {
        double r47482 = x;
        double r47483 = sin(r47482);
        double r47484 = y;
        double r47485 = sinh(r47484);
        double r47486 = r47483 * r47485;
        double r47487 = r47486 / r47482;
        return r47487;
}


double f_of(float x, float y) {
        float r47488 = x;
        float r47489 = sin(r47488);
        float r47490 = y;
        float r47491 = sinh(r47490);
        float r47492 = r47491 / r47488;
        float r47493 = r47489 * r47492;
        return r47493;
}

double f_od(double x, double y) {
        double r47494 = x;
        double r47495 = sin(r47494);
        double r47496 = y;
        double r47497 = sinh(r47496);
        double r47498 = r47497 / r47494;
        double r47499 = r47495 * r47498;
        return r47499;
}

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 r47500, r47501, r47502, r47503, r47504, r47505;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47500);
        mpfr_init(r47501);
        mpfr_init(r47502);
        mpfr_init(r47503);
        mpfr_init(r47504);
        mpfr_init(r47505);
}

double f_im(double x, double y) {
        mpfr_set_d(r47500, x, MPFR_RNDN);
        mpfr_sin(r47501, r47500, MPFR_RNDN);
        mpfr_set_d(r47502, y, MPFR_RNDN);
        mpfr_sinh(r47503, r47502, MPFR_RNDN);
        mpfr_mul(r47504, r47501, r47503, MPFR_RNDN);
        mpfr_div(r47505, r47504, r47500, MPFR_RNDN);
        return mpfr_get_d(r47505, MPFR_RNDN);
}

static mpfr_t r47506, r47507, r47508, r47509, r47510, r47511;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47506);
        mpfr_init(r47507);
        mpfr_init(r47508);
        mpfr_init(r47509);
        mpfr_init(r47510);
        mpfr_init(r47511);
}

double f_fm(double x, double y) {
        mpfr_set_d(r47506, x, MPFR_RNDN);
        mpfr_sin(r47507, r47506, MPFR_RNDN);
        mpfr_set_d(r47508, y, MPFR_RNDN);
        mpfr_sinh(r47509, r47508, MPFR_RNDN);
        mpfr_div(r47510, r47509, r47506, MPFR_RNDN);
        mpfr_mul(r47511, r47507, r47510, MPFR_RNDN);
        return mpfr_get_d(r47511, MPFR_RNDN);
}

static mpfr_t r47512, r47513, r47514, r47515, r47516, r47517;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47512);
        mpfr_init(r47513);
        mpfr_init(r47514);
        mpfr_init(r47515);
        mpfr_init(r47516);
        mpfr_init(r47517);
}

double f_dm(double x, double y) {
        mpfr_set_d(r47512, x, MPFR_RNDN);
        mpfr_sin(r47513, r47512, MPFR_RNDN);
        mpfr_set_d(r47514, y, MPFR_RNDN);
        mpfr_sinh(r47515, r47514, MPFR_RNDN);
        mpfr_div(r47516, r47515, r47512, MPFR_RNDN);
        mpfr_mul(r47517, r47513, r47516, MPFR_RNDN);
        return mpfr_get_d(r47517, MPFR_RNDN);
}

