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

char *name = "Distance on a great circle";

double f_if(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r9182 = R;
        float r9183 = 2.0f;
        float r9184 = phi1;
        float r9185 = phi2;
        float r9186 = r9184 - r9185;
        float r9187 = r9186 / r9183;
        float r9188 = sin(r9187);
        float r9189 = pow(r9188, r9183);
        float r9190 = cos(r9184);
        float r9191 = cos(r9185);
        float r9192 = r9190 * r9191;
        float r9193 = lambda1;
        float r9194 = lambda2;
        float r9195 = r9193 - r9194;
        float r9196 = r9195 / r9183;
        float r9197 = sin(r9196);
        float r9198 = r9192 * r9197;
        float r9199 = r9198 * r9197;
        float r9200 = r9189 + r9199;
        float r9201 = sqrt(r9200);
        float r9202 = 1.0f;
        float r9203 = r9202 - r9200;
        float r9204 = sqrt(r9203);
        float r9205 = atan2(r9201, r9204);
        float r9206 = r9183 * r9205;
        float r9207 = r9182 * r9206;
        return r9207;
}

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r9208 = R;
        double r9209 = 2.0;
        double r9210 = phi1;
        double r9211 = phi2;
        double r9212 = r9210 - r9211;
        double r9213 = r9212 / r9209;
        double r9214 = sin(r9213);
        double r9215 = pow(r9214, r9209);
        double r9216 = cos(r9210);
        double r9217 = cos(r9211);
        double r9218 = r9216 * r9217;
        double r9219 = lambda1;
        double r9220 = lambda2;
        double r9221 = r9219 - r9220;
        double r9222 = r9221 / r9209;
        double r9223 = sin(r9222);
        double r9224 = r9218 * r9223;
        double r9225 = r9224 * r9223;
        double r9226 = r9215 + r9225;
        double r9227 = sqrt(r9226);
        double r9228 = 1.0;
        double r9229 = r9228 - r9226;
        double r9230 = sqrt(r9229);
        double r9231 = atan2(r9227, r9230);
        double r9232 = r9209 * r9231;
        double r9233 = r9208 * r9232;
        return r9233;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r9234 = lambda1;
        float r9235 = lambda2;
        float r9236 = r9234 - r9235;
        float r9237 = 2.0f;
        float r9238 = r9236 / r9237;
        float r9239 = sin(r9238);
        float r9240 = phi1;
        float r9241 = cos(r9240);
        float r9242 = phi2;
        float r9243 = cos(r9242);
        float r9244 = r9241 * r9243;
        float r9245 = r9239 * r9244;
        float r9246 = r9240 - r9242;
        float r9247 = r9246 / r9237;
        float r9248 = sin(r9247);
        float r9249 = log1p(r9248);
        float r9250 = expm1(r9249);
        float r9251 = r9248 * r9250;
        float r9252 = fma(r9239, r9245, r9251);
        float r9253 = sqrt(r9252);
        float r9254 = -r9243;
        float r9255 = r9254 * r9241;
        float r9256 = r9239 * r9255;
        float r9257 = cos(r9247);
        float r9258 = exp(r9257);
        float r9259 = log(r9258);
        float r9260 = r9259 * r9257;
        float r9261 = fma(r9239, r9256, r9260);
        float r9262 = sqrt(r9261);
        float r9263 = atan2(r9253, r9262);
        float r9264 = R;
        float r9265 = r9237 * r9264;
        float r9266 = r9263 * r9265;
        return r9266;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r9267 = lambda1;
        double r9268 = lambda2;
        double r9269 = r9267 - r9268;
        double r9270 = 2.0;
        double r9271 = r9269 / r9270;
        double r9272 = sin(r9271);
        double r9273 = phi1;
        double r9274 = cos(r9273);
        double r9275 = phi2;
        double r9276 = cos(r9275);
        double r9277 = r9274 * r9276;
        double r9278 = r9272 * r9277;
        double r9279 = r9273 - r9275;
        double r9280 = r9279 / r9270;
        double r9281 = sin(r9280);
        double r9282 = log1p(r9281);
        double r9283 = expm1(r9282);
        double r9284 = r9281 * r9283;
        double r9285 = fma(r9272, r9278, r9284);
        double r9286 = sqrt(r9285);
        double r9287 = -r9276;
        double r9288 = r9287 * r9274;
        double r9289 = r9272 * r9288;
        double r9290 = cos(r9280);
        double r9291 = exp(r9290);
        double r9292 = log(r9291);
        double r9293 = r9292 * r9290;
        double r9294 = fma(r9272, r9289, r9293);
        double r9295 = sqrt(r9294);
        double r9296 = atan2(r9286, r9295);
        double r9297 = R;
        double r9298 = r9270 * r9297;
        double r9299 = r9296 * r9298;
        return r9299;
}

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 r9300, r9301, r9302, r9303, r9304, r9305, r9306, r9307, r9308, r9309, r9310, r9311, r9312, r9313, r9314, r9315, r9316, r9317, r9318, r9319, r9320, r9321, r9322, r9323, r9324, r9325;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9300);
        mpfr_init_set_str(r9301, "2", 10, MPFR_RNDN);
        mpfr_init(r9302);
        mpfr_init(r9303);
        mpfr_init(r9304);
        mpfr_init(r9305);
        mpfr_init(r9306);
        mpfr_init(r9307);
        mpfr_init(r9308);
        mpfr_init(r9309);
        mpfr_init(r9310);
        mpfr_init(r9311);
        mpfr_init(r9312);
        mpfr_init(r9313);
        mpfr_init(r9314);
        mpfr_init(r9315);
        mpfr_init(r9316);
        mpfr_init(r9317);
        mpfr_init(r9318);
        mpfr_init(r9319);
        mpfr_init_set_str(r9320, "1", 10, MPFR_RNDN);
        mpfr_init(r9321);
        mpfr_init(r9322);
        mpfr_init(r9323);
        mpfr_init(r9324);
        mpfr_init(r9325);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r9300, R, MPFR_RNDN);
        ;
        mpfr_set_d(r9302, phi1, MPFR_RNDN);
        mpfr_set_d(r9303, phi2, MPFR_RNDN);
        mpfr_sub(r9304, r9302, r9303, MPFR_RNDN);
        mpfr_div(r9305, r9304, r9301, MPFR_RNDN);
        mpfr_sin(r9306, r9305, MPFR_RNDN);
        mpfr_pow(r9307, r9306, r9301, MPFR_RNDN);
        mpfr_cos(r9308, r9302, MPFR_RNDN);
        mpfr_cos(r9309, r9303, MPFR_RNDN);
        mpfr_mul(r9310, r9308, r9309, MPFR_RNDN);
        mpfr_set_d(r9311, lambda1, MPFR_RNDN);
        mpfr_set_d(r9312, lambda2, MPFR_RNDN);
        mpfr_sub(r9313, r9311, r9312, MPFR_RNDN);
        mpfr_div(r9314, r9313, r9301, MPFR_RNDN);
        mpfr_sin(r9315, r9314, MPFR_RNDN);
        mpfr_mul(r9316, r9310, r9315, MPFR_RNDN);
        mpfr_mul(r9317, r9316, r9315, MPFR_RNDN);
        mpfr_add(r9318, r9307, r9317, MPFR_RNDN);
        mpfr_sqrt(r9319, r9318, MPFR_RNDN);
        ;
        mpfr_sub(r9321, r9320, r9318, MPFR_RNDN);
        mpfr_sqrt(r9322, r9321, MPFR_RNDN);
        mpfr_atan2(r9323, r9319, r9322, MPFR_RNDN);
        mpfr_mul(r9324, r9301, r9323, MPFR_RNDN);
        mpfr_mul(r9325, r9300, r9324, MPFR_RNDN);
        return mpfr_get_d(r9325, MPFR_RNDN);
}

static mpfr_t r9326, r9327, r9328, r9329, r9330, r9331, r9332, r9333, r9334, r9335, r9336, r9337, r9338, r9339, r9340, r9341, r9342, r9343, r9344, r9345, r9346, r9347, r9348, r9349, r9350, r9351, r9352, r9353, r9354, r9355, r9356, r9357, r9358;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9326);
        mpfr_init(r9327);
        mpfr_init(r9328);
        mpfr_init_set_str(r9329, "2", 10, MPFR_RNDN);
        mpfr_init(r9330);
        mpfr_init(r9331);
        mpfr_init(r9332);
        mpfr_init(r9333);
        mpfr_init(r9334);
        mpfr_init(r9335);
        mpfr_init(r9336);
        mpfr_init(r9337);
        mpfr_init(r9338);
        mpfr_init(r9339);
        mpfr_init(r9340);
        mpfr_init(r9341);
        mpfr_init(r9342);
        mpfr_init(r9343);
        mpfr_init(r9344);
        mpfr_init(r9345);
        mpfr_init(r9346);
        mpfr_init(r9347);
        mpfr_init(r9348);
        mpfr_init(r9349);
        mpfr_init(r9350);
        mpfr_init(r9351);
        mpfr_init(r9352);
        mpfr_init(r9353);
        mpfr_init(r9354);
        mpfr_init(r9355);
        mpfr_init(r9356);
        mpfr_init(r9357);
        mpfr_init(r9358);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r9326, lambda1, MPFR_RNDN);
        mpfr_set_d(r9327, lambda2, MPFR_RNDN);
        mpfr_sub(r9328, r9326, r9327, MPFR_RNDN);
        ;
        mpfr_div(r9330, r9328, r9329, MPFR_RNDN);
        mpfr_sin(r9331, r9330, MPFR_RNDN);
        mpfr_set_d(r9332, phi1, MPFR_RNDN);
        mpfr_cos(r9333, r9332, MPFR_RNDN);
        mpfr_set_d(r9334, phi2, MPFR_RNDN);
        mpfr_cos(r9335, r9334, MPFR_RNDN);
        mpfr_mul(r9336, r9333, r9335, MPFR_RNDN);
        mpfr_mul(r9337, r9331, r9336, MPFR_RNDN);
        mpfr_sub(r9338, r9332, r9334, MPFR_RNDN);
        mpfr_div(r9339, r9338, r9329, MPFR_RNDN);
        mpfr_sin(r9340, r9339, MPFR_RNDN);
        mpfr_log1p(r9341, r9340, MPFR_RNDN);
        mpfr_expm1(r9342, r9341, MPFR_RNDN);
        mpfr_mul(r9343, r9340, r9342, MPFR_RNDN);
        mpfr_fma(r9344, r9331, r9337, r9343, MPFR_RNDN);
        mpfr_sqrt(r9345, r9344, MPFR_RNDN);
        mpfr_neg(r9346, r9335, MPFR_RNDN);
        mpfr_mul(r9347, r9346, r9333, MPFR_RNDN);
        mpfr_mul(r9348, r9331, r9347, MPFR_RNDN);
        mpfr_cos(r9349, r9339, MPFR_RNDN);
        mpfr_exp(r9350, r9349, MPFR_RNDN);
        mpfr_log(r9351, r9350, MPFR_RNDN);
        mpfr_mul(r9352, r9351, r9349, MPFR_RNDN);
        mpfr_fma(r9353, r9331, r9348, r9352, MPFR_RNDN);
        mpfr_sqrt(r9354, r9353, MPFR_RNDN);
        mpfr_atan2(r9355, r9345, r9354, MPFR_RNDN);
        mpfr_set_d(r9356, R, MPFR_RNDN);
        mpfr_mul(r9357, r9329, r9356, MPFR_RNDN);
        mpfr_mul(r9358, r9355, r9357, MPFR_RNDN);
        return mpfr_get_d(r9358, MPFR_RNDN);
}

static mpfr_t r9359, r9360, r9361, r9362, r9363, r9364, r9365, r9366, r9367, r9368, r9369, r9370, r9371, r9372, r9373, r9374, r9375, r9376, r9377, r9378, r9379, r9380, r9381, r9382, r9383, r9384, r9385, r9386, r9387, r9388, r9389, r9390, r9391;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9359);
        mpfr_init(r9360);
        mpfr_init(r9361);
        mpfr_init_set_str(r9362, "2", 10, MPFR_RNDN);
        mpfr_init(r9363);
        mpfr_init(r9364);
        mpfr_init(r9365);
        mpfr_init(r9366);
        mpfr_init(r9367);
        mpfr_init(r9368);
        mpfr_init(r9369);
        mpfr_init(r9370);
        mpfr_init(r9371);
        mpfr_init(r9372);
        mpfr_init(r9373);
        mpfr_init(r9374);
        mpfr_init(r9375);
        mpfr_init(r9376);
        mpfr_init(r9377);
        mpfr_init(r9378);
        mpfr_init(r9379);
        mpfr_init(r9380);
        mpfr_init(r9381);
        mpfr_init(r9382);
        mpfr_init(r9383);
        mpfr_init(r9384);
        mpfr_init(r9385);
        mpfr_init(r9386);
        mpfr_init(r9387);
        mpfr_init(r9388);
        mpfr_init(r9389);
        mpfr_init(r9390);
        mpfr_init(r9391);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r9359, lambda1, MPFR_RNDN);
        mpfr_set_d(r9360, lambda2, MPFR_RNDN);
        mpfr_sub(r9361, r9359, r9360, MPFR_RNDN);
        ;
        mpfr_div(r9363, r9361, r9362, MPFR_RNDN);
        mpfr_sin(r9364, r9363, MPFR_RNDN);
        mpfr_set_d(r9365, phi1, MPFR_RNDN);
        mpfr_cos(r9366, r9365, MPFR_RNDN);
        mpfr_set_d(r9367, phi2, MPFR_RNDN);
        mpfr_cos(r9368, r9367, MPFR_RNDN);
        mpfr_mul(r9369, r9366, r9368, MPFR_RNDN);
        mpfr_mul(r9370, r9364, r9369, MPFR_RNDN);
        mpfr_sub(r9371, r9365, r9367, MPFR_RNDN);
        mpfr_div(r9372, r9371, r9362, MPFR_RNDN);
        mpfr_sin(r9373, r9372, MPFR_RNDN);
        mpfr_log1p(r9374, r9373, MPFR_RNDN);
        mpfr_expm1(r9375, r9374, MPFR_RNDN);
        mpfr_mul(r9376, r9373, r9375, MPFR_RNDN);
        mpfr_fma(r9377, r9364, r9370, r9376, MPFR_RNDN);
        mpfr_sqrt(r9378, r9377, MPFR_RNDN);
        mpfr_neg(r9379, r9368, MPFR_RNDN);
        mpfr_mul(r9380, r9379, r9366, MPFR_RNDN);
        mpfr_mul(r9381, r9364, r9380, MPFR_RNDN);
        mpfr_cos(r9382, r9372, MPFR_RNDN);
        mpfr_exp(r9383, r9382, MPFR_RNDN);
        mpfr_log(r9384, r9383, MPFR_RNDN);
        mpfr_mul(r9385, r9384, r9382, MPFR_RNDN);
        mpfr_fma(r9386, r9364, r9381, r9385, MPFR_RNDN);
        mpfr_sqrt(r9387, r9386, MPFR_RNDN);
        mpfr_atan2(r9388, r9378, r9387, MPFR_RNDN);
        mpfr_set_d(r9389, R, MPFR_RNDN);
        mpfr_mul(r9390, r9362, r9389, MPFR_RNDN);
        mpfr_mul(r9391, r9388, r9390, MPFR_RNDN);
        return mpfr_get_d(r9391, MPFR_RNDN);
}

