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

char *name = "Toniolo and Linder, Equation (3b), real";

double f_if(float kx, float ky, float th) {
        float r8237 = ky;
        float r8238 = sin(r8237);
        float r8239 = kx;
        float r8240 = sin(r8239);
        float r8241 = 2.0f;
        float r8242 = pow(r8240, r8241);
        float r8243 = pow(r8238, r8241);
        float r8244 = r8242 + r8243;
        float r8245 = sqrt(r8244);
        float r8246 = r8238 / r8245;
        float r8247 = th;
        float r8248 = sin(r8247);
        float r8249 = r8246 * r8248;
        return r8249;
}

double f_id(double kx, double ky, double th) {
        double r8250 = ky;
        double r8251 = sin(r8250);
        double r8252 = kx;
        double r8253 = sin(r8252);
        double r8254 = 2.0;
        double r8255 = pow(r8253, r8254);
        double r8256 = pow(r8251, r8254);
        double r8257 = r8255 + r8256;
        double r8258 = sqrt(r8257);
        double r8259 = r8251 / r8258;
        double r8260 = th;
        double r8261 = sin(r8260);
        double r8262 = r8259 * r8261;
        return r8262;
}


double f_of(float kx, float ky, float th) {
        float r8263 = ky;
        float r8264 = sin(r8263);
        float r8265 = r8264 * r8264;
        float r8266 = kx;
        float r8267 = sin(r8266);
        float r8268 = r8267 * r8267;
        float r8269 = r8265 + r8268;
        float r8270 = sqrt(r8269);
        float r8271 = r8270 / r8264;
        float r8272 = -6.9465654213039e-310f;
        bool r8273 = r8271 <= r8272;
        float r8274 = th;
        float r8275 = sin(r8274);
        float r8276 = 1.0f;
        float r8277 = 2.0f;
        float r8278 = pow(r8267, r8277);
        float r8279 = pow(r8264, r8277);
        float r8280 = r8278 + r8279;
        float r8281 = sqrt(r8280);
        float r8282 = r8276 / r8281;
        float r8283 = r8264 * r8282;
        float r8284 = r8275 * r8283;
        float r8285 = 6.9465654213039e-310f;
        bool r8286 = r8271 <= r8285;
        float r8287 = r8264 * r8275;
        float r8288 = pow(r8266, r8277);
        float r8289 = r8263 * r8288;
        float r8290 = 0.08333333333333333f;
        float r8291 = r8289 * r8290;
        float r8292 = r8263 + r8291;
        float r8293 = 3.0f;
        float r8294 = pow(r8263, r8293);
        float r8295 = 0.16666666666666666f;
        float r8296 = r8294 * r8295;
        float r8297 = r8292 - r8296;
        float r8298 = r8287 / r8297;
        float r8299 = r8286 ? r8298 : r8284;
        float r8300 = r8273 ? r8284 : r8299;
        return r8300;
}

double f_od(double kx, double ky, double th) {
        double r8301 = ky;
        double r8302 = sin(r8301);
        double r8303 = r8302 * r8302;
        double r8304 = kx;
        double r8305 = sin(r8304);
        double r8306 = r8305 * r8305;
        double r8307 = r8303 + r8306;
        double r8308 = sqrt(r8307);
        double r8309 = r8308 / r8302;
        double r8310 = -6.9465654213039e-310;
        bool r8311 = r8309 <= r8310;
        double r8312 = th;
        double r8313 = sin(r8312);
        double r8314 = 1.0;
        double r8315 = 2.0;
        double r8316 = pow(r8305, r8315);
        double r8317 = pow(r8302, r8315);
        double r8318 = r8316 + r8317;
        double r8319 = sqrt(r8318);
        double r8320 = r8314 / r8319;
        double r8321 = r8302 * r8320;
        double r8322 = r8313 * r8321;
        double r8323 = 6.9465654213039e-310;
        bool r8324 = r8309 <= r8323;
        double r8325 = r8302 * r8313;
        double r8326 = pow(r8304, r8315);
        double r8327 = r8301 * r8326;
        double r8328 = 0.08333333333333333;
        double r8329 = r8327 * r8328;
        double r8330 = r8301 + r8329;
        double r8331 = 3.0;
        double r8332 = pow(r8301, r8331);
        double r8333 = 0.16666666666666666;
        double r8334 = r8332 * r8333;
        double r8335 = r8330 - r8334;
        double r8336 = r8325 / r8335;
        double r8337 = r8324 ? r8336 : r8322;
        double r8338 = r8311 ? r8322 : r8337;
        return r8338;
}

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 r8339, r8340, r8341, r8342, r8343, r8344, r8345, r8346, r8347, r8348, r8349, r8350, r8351;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8339);
        mpfr_init(r8340);
        mpfr_init(r8341);
        mpfr_init(r8342);
        mpfr_init_set_str(r8343, "2", 10, MPFR_RNDN);
        mpfr_init(r8344);
        mpfr_init(r8345);
        mpfr_init(r8346);
        mpfr_init(r8347);
        mpfr_init(r8348);
        mpfr_init(r8349);
        mpfr_init(r8350);
        mpfr_init(r8351);
}

double f_im(double kx, double ky, double th) {
        mpfr_set_d(r8339, ky, MPFR_RNDN);
        mpfr_sin(r8340, r8339, MPFR_RNDN);
        mpfr_set_d(r8341, kx, MPFR_RNDN);
        mpfr_sin(r8342, r8341, MPFR_RNDN);
        ;
        mpfr_pow(r8344, r8342, r8343, MPFR_RNDN);
        mpfr_pow(r8345, r8340, r8343, MPFR_RNDN);
        mpfr_add(r8346, r8344, r8345, MPFR_RNDN);
        mpfr_sqrt(r8347, r8346, MPFR_RNDN);
        mpfr_div(r8348, r8340, r8347, MPFR_RNDN);
        mpfr_set_d(r8349, th, MPFR_RNDN);
        mpfr_sin(r8350, r8349, MPFR_RNDN);
        mpfr_mul(r8351, r8348, r8350, MPFR_RNDN);
        return mpfr_get_d(r8351, MPFR_RNDN);
}

static mpfr_t r8352, r8353, r8354, r8355, r8356, r8357, r8358, r8359, r8360, r8361, r8362, r8363, r8364, r8365, r8366, r8367, r8368, r8369, r8370, r8371, r8372, r8373, r8374, r8375, r8376, r8377, r8378, r8379, r8380, r8381, r8382, r8383, r8384, r8385, r8386, r8387, r8388, r8389;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8352);
        mpfr_init(r8353);
        mpfr_init(r8354);
        mpfr_init(r8355);
        mpfr_init(r8356);
        mpfr_init(r8357);
        mpfr_init(r8358);
        mpfr_init(r8359);
        mpfr_init(r8360);
        mpfr_init_set_str(r8361, "-6.9465654213039e-310", 10, MPFR_RNDN);
        mpfr_init(r8362);
        mpfr_init(r8363);
        mpfr_init(r8364);
        mpfr_init_set_str(r8365, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8366, "2", 10, MPFR_RNDN);
        mpfr_init(r8367);
        mpfr_init(r8368);
        mpfr_init(r8369);
        mpfr_init(r8370);
        mpfr_init(r8371);
        mpfr_init(r8372);
        mpfr_init(r8373);
        mpfr_init_set_str(r8374, "6.9465654213039e-310", 10, MPFR_RNDN);
        mpfr_init(r8375);
        mpfr_init(r8376);
        mpfr_init(r8377);
        mpfr_init(r8378);
        mpfr_init_set_str(r8379, "1/12", 10, MPFR_RNDN);
        mpfr_init(r8380);
        mpfr_init(r8381);
        mpfr_init_set_str(r8382, "3", 10, MPFR_RNDN);
        mpfr_init(r8383);
        mpfr_init_set_str(r8384, "1/6", 10, MPFR_RNDN);
        mpfr_init(r8385);
        mpfr_init(r8386);
        mpfr_init(r8387);
        mpfr_init(r8388);
        mpfr_init(r8389);
}

double f_fm(double kx, double ky, double th) {
        mpfr_set_d(r8352, ky, MPFR_RNDN);
        mpfr_sin(r8353, r8352, MPFR_RNDN);
        mpfr_mul(r8354, r8353, r8353, MPFR_RNDN);
        mpfr_set_d(r8355, kx, MPFR_RNDN);
        mpfr_sin(r8356, r8355, MPFR_RNDN);
        mpfr_mul(r8357, r8356, r8356, MPFR_RNDN);
        mpfr_add(r8358, r8354, r8357, MPFR_RNDN);
        mpfr_sqrt(r8359, r8358, MPFR_RNDN);
        mpfr_div(r8360, r8359, r8353, MPFR_RNDN);
        ;
        mpfr_set_si(r8362, mpfr_cmp(r8360, r8361) <= 0, MPFR_RNDN);
        mpfr_set_d(r8363, th, MPFR_RNDN);
        mpfr_sin(r8364, r8363, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8367, r8356, r8366, MPFR_RNDN);
        mpfr_pow(r8368, r8353, r8366, MPFR_RNDN);
        mpfr_add(r8369, r8367, r8368, MPFR_RNDN);
        mpfr_sqrt(r8370, r8369, MPFR_RNDN);
        mpfr_div(r8371, r8365, r8370, MPFR_RNDN);
        mpfr_mul(r8372, r8353, r8371, MPFR_RNDN);
        mpfr_mul(r8373, r8364, r8372, MPFR_RNDN);
        ;
        mpfr_set_si(r8375, mpfr_cmp(r8360, r8374) <= 0, MPFR_RNDN);
        mpfr_mul(r8376, r8353, r8364, MPFR_RNDN);
        mpfr_pow(r8377, r8355, r8366, MPFR_RNDN);
        mpfr_mul(r8378, r8352, r8377, MPFR_RNDN);
        ;
        mpfr_mul(r8380, r8378, r8379, MPFR_RNDN);
        mpfr_add(r8381, r8352, r8380, MPFR_RNDN);
        ;
        mpfr_pow(r8383, r8352, r8382, MPFR_RNDN);
        ;
        mpfr_mul(r8385, r8383, r8384, MPFR_RNDN);
        mpfr_sub(r8386, r8381, r8385, MPFR_RNDN);
        mpfr_div(r8387, r8376, r8386, MPFR_RNDN);
        if (mpfr_get_si(r8375, MPFR_RNDN)) { mpfr_set(r8388, r8387, MPFR_RNDN); } else { mpfr_set(r8388, r8373, MPFR_RNDN); };
        if (mpfr_get_si(r8362, MPFR_RNDN)) { mpfr_set(r8389, r8373, MPFR_RNDN); } else { mpfr_set(r8389, r8388, MPFR_RNDN); };
        return mpfr_get_d(r8389, MPFR_RNDN);
}

static mpfr_t r8390, r8391, r8392, r8393, r8394, r8395, r8396, r8397, r8398, r8399, r8400, r8401, r8402, r8403, r8404, r8405, r8406, r8407, r8408, r8409, r8410, r8411, r8412, r8413, r8414, r8415, r8416, r8417, r8418, r8419, r8420, r8421, r8422, r8423, r8424, r8425, r8426, r8427;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8390);
        mpfr_init(r8391);
        mpfr_init(r8392);
        mpfr_init(r8393);
        mpfr_init(r8394);
        mpfr_init(r8395);
        mpfr_init(r8396);
        mpfr_init(r8397);
        mpfr_init(r8398);
        mpfr_init_set_str(r8399, "-6.9465654213039e-310", 10, MPFR_RNDN);
        mpfr_init(r8400);
        mpfr_init(r8401);
        mpfr_init(r8402);
        mpfr_init_set_str(r8403, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8404, "2", 10, MPFR_RNDN);
        mpfr_init(r8405);
        mpfr_init(r8406);
        mpfr_init(r8407);
        mpfr_init(r8408);
        mpfr_init(r8409);
        mpfr_init(r8410);
        mpfr_init(r8411);
        mpfr_init_set_str(r8412, "6.9465654213039e-310", 10, MPFR_RNDN);
        mpfr_init(r8413);
        mpfr_init(r8414);
        mpfr_init(r8415);
        mpfr_init(r8416);
        mpfr_init_set_str(r8417, "1/12", 10, MPFR_RNDN);
        mpfr_init(r8418);
        mpfr_init(r8419);
        mpfr_init_set_str(r8420, "3", 10, MPFR_RNDN);
        mpfr_init(r8421);
        mpfr_init_set_str(r8422, "1/6", 10, MPFR_RNDN);
        mpfr_init(r8423);
        mpfr_init(r8424);
        mpfr_init(r8425);
        mpfr_init(r8426);
        mpfr_init(r8427);
}

double f_dm(double kx, double ky, double th) {
        mpfr_set_d(r8390, ky, MPFR_RNDN);
        mpfr_sin(r8391, r8390, MPFR_RNDN);
        mpfr_mul(r8392, r8391, r8391, MPFR_RNDN);
        mpfr_set_d(r8393, kx, MPFR_RNDN);
        mpfr_sin(r8394, r8393, MPFR_RNDN);
        mpfr_mul(r8395, r8394, r8394, MPFR_RNDN);
        mpfr_add(r8396, r8392, r8395, MPFR_RNDN);
        mpfr_sqrt(r8397, r8396, MPFR_RNDN);
        mpfr_div(r8398, r8397, r8391, MPFR_RNDN);
        ;
        mpfr_set_si(r8400, mpfr_cmp(r8398, r8399) <= 0, MPFR_RNDN);
        mpfr_set_d(r8401, th, MPFR_RNDN);
        mpfr_sin(r8402, r8401, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8405, r8394, r8404, MPFR_RNDN);
        mpfr_pow(r8406, r8391, r8404, MPFR_RNDN);
        mpfr_add(r8407, r8405, r8406, MPFR_RNDN);
        mpfr_sqrt(r8408, r8407, MPFR_RNDN);
        mpfr_div(r8409, r8403, r8408, MPFR_RNDN);
        mpfr_mul(r8410, r8391, r8409, MPFR_RNDN);
        mpfr_mul(r8411, r8402, r8410, MPFR_RNDN);
        ;
        mpfr_set_si(r8413, mpfr_cmp(r8398, r8412) <= 0, MPFR_RNDN);
        mpfr_mul(r8414, r8391, r8402, MPFR_RNDN);
        mpfr_pow(r8415, r8393, r8404, MPFR_RNDN);
        mpfr_mul(r8416, r8390, r8415, MPFR_RNDN);
        ;
        mpfr_mul(r8418, r8416, r8417, MPFR_RNDN);
        mpfr_add(r8419, r8390, r8418, MPFR_RNDN);
        ;
        mpfr_pow(r8421, r8390, r8420, MPFR_RNDN);
        ;
        mpfr_mul(r8423, r8421, r8422, MPFR_RNDN);
        mpfr_sub(r8424, r8419, r8423, MPFR_RNDN);
        mpfr_div(r8425, r8414, r8424, MPFR_RNDN);
        if (mpfr_get_si(r8413, MPFR_RNDN)) { mpfr_set(r8426, r8425, MPFR_RNDN); } else { mpfr_set(r8426, r8411, MPFR_RNDN); };
        if (mpfr_get_si(r8400, MPFR_RNDN)) { mpfr_set(r8427, r8411, MPFR_RNDN); } else { mpfr_set(r8427, r8426, MPFR_RNDN); };
        return mpfr_get_d(r8427, MPFR_RNDN);
}

