#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "rt_fix.h"

int
main(int argc, char **argv)
{
    rt_fix fix_1;
    rt_fix fix_2;
    rt_fix fix_3;

    printf("Testing different init functions:\n");
    printf("---------------------------------\n");
    rt_fix_init_i(&fix_1, 20);
    printf("rt_fix_init_i(20) = %d\n", rt_fix_toi(fix_1));
    rt_fix_init_i(&fix_1, -333);
    printf("rt_fix_init_i(-333) = %d\n", rt_fix_toi(fix_1));
    rt_fix_init_d(&fix_1, M_PI);
    printf("rt_fix_init_i(PI) = %f\n", rt_fix_tod(fix_1));
    rt_fix_init_mask(&fix_1, 0x77D79D40, 3);
    printf("rt_fix_init_mask(0x77D79D40, 3) = %f\n", rt_fix_tod(fix_1));
    rt_fix_init_d(&fix_1, 1.0 / 3.0);
    printf("rt_fix_init_d(1.0 / 3.0) = %f\n", rt_fix_tod(fix_1));
    rt_fix_init_d(&fix_1, -1.0 / 2.0);
    printf("rt_fix_init_d(-1.0 / 2.0) = %f\n", rt_fix_tod(fix_1));
    printf("\n");

    printf("Test of addition:\n");
    printf("-----------------\n");
    rt_fix_init_i(&fix_1, 1);
    rt_fix_init_i(&fix_2, 2);
    printf("%d + %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_add(fix_1, fix_2)));
     
    rt_fix_init_i(&fix_1, 1);
    rt_fix_init_i(&fix_2, -3);
    printf("%d + %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_add(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, 2);
    rt_fix_init_i(&fix_2, 1);
    printf("%d + %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_add(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, -3);
    rt_fix_init_i(&fix_2, 1);
    printf("%d + %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_add(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, 200);
    rt_fix_init_i(&fix_2, 200);
    printf("%d + %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_add(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, -200);
    rt_fix_init_i(&fix_2, -200);
    printf("%d + (%d) = %d\n", rt_fix_toi(fix_1),
                               rt_fix_toi(fix_2),
                               rt_fix_toi(rt_fix_add(fix_1, fix_2)));

    rt_fix_init_d(&fix_1, M_PI);
    rt_fix_init_d(&fix_2, 0.707106781);
    printf("%f + %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_add(fix_1, fix_2)));
    rt_fix_init_d(&fix_1, M_PI);
    rt_fix_init_d(&fix_2, -0.707106781);
    printf("%f + (%f) = %f\n", rt_fix_tod(fix_1),
                               rt_fix_tod(fix_2),
                               rt_fix_tod(rt_fix_add(fix_1, fix_2)));
    rt_fix_init_d(&fix_1, -M_PI);
    rt_fix_init_d(&fix_2, 0.707106781);
    printf("%f + %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_add(fix_1, fix_2)));
    rt_fix_init_d(&fix_1, M_PI);
    rt_fix_init_d(&fix_2, M_PI);
    printf("%f + %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_add(fix_1, fix_2)));
    printf("\n");

    printf("Test of subtraction:\n");
    printf("--------------------\n");
    rt_fix_init_i(&fix_1, 1);
    rt_fix_init_i(&fix_2, 2);
    printf("%d - %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_sub(fix_1, fix_2)));
     
    rt_fix_init_i(&fix_1, 1);
    rt_fix_init_i(&fix_2, -3);
    printf("%d - (%d) = %d\n", rt_fix_toi(fix_1),
                               rt_fix_toi(fix_2),
                               rt_fix_toi(rt_fix_sub(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, 1);
    rt_fix_init_i(&fix_2, -1);
    printf("%d - (%d) = %d\n", rt_fix_toi(fix_1),
                               rt_fix_toi(fix_2),
                               rt_fix_toi(rt_fix_sub(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, 2);
    rt_fix_init_i(&fix_2, 1);
    printf("%d - %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_sub(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, -3);
    rt_fix_init_i(&fix_2, 1);
    printf("%d - %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_sub(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, 200);
    rt_fix_init_i(&fix_2, 200);
    printf("%d - %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_sub(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, -200);
    rt_fix_init_i(&fix_2, -200);
    printf("%d - (%d) = %d\n", rt_fix_toi(fix_1),
                               rt_fix_toi(fix_2),
                               rt_fix_toi(rt_fix_sub(fix_1, fix_2)));
    rt_fix_init_d(&fix_1, M_PI);
    rt_fix_init_d(&fix_2, 0.707106781);
    printf("%f - %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_sub(fix_1, fix_2)));
    rt_fix_init_d(&fix_1, M_PI);
    rt_fix_init_d(&fix_2, -0.707106781);
    printf("%f - (%f) = %f\n", rt_fix_tod(fix_1),
                               rt_fix_tod(fix_2),
                               rt_fix_tod(rt_fix_sub(fix_1, fix_2)));
    rt_fix_init_d(&fix_1, -M_PI);
    rt_fix_init_d(&fix_2, 0.707106781);
    printf("%f - %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_sub(fix_1, fix_2)));
    rt_fix_init_d(&fix_1, M_PI);
    rt_fix_init_d(&fix_2, M_PI);
    printf("%f - %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_sub(fix_1, fix_2)));
    printf("\n");

    printf("Test of multiplication:\n");
    printf("-----------------------\n");
    rt_fix_init_i(&fix_1, 1);
    rt_fix_init_i(&fix_2, 2);
    printf("%d * %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_mul(fix_1, fix_2)));
     
    rt_fix_init_i(&fix_1, 1);
    rt_fix_init_i(&fix_2, -3);
    printf("%d * (%d) = %d\n", rt_fix_toi(fix_1),
                               rt_fix_toi(fix_2),
                               rt_fix_toi(rt_fix_mul(fix_1, fix_2)));

    rt_fix_init_i(&fix_1, 2);
    rt_fix_init_i(&fix_2, 1);
    printf("%d * %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_mul(fix_1, fix_2)));

    rt_fix_init_i(&fix_1, -3);
    rt_fix_init_i(&fix_2, 1);
    printf("%d * %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_mul(fix_1, fix_2)));

    rt_fix_init_i(&fix_1, 1073741824);
	if(rt_fix_errtstset(fix_3 = rt_fix_mul(fix_1, fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("%d * %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_1),
                             rt_fix_toi(fix_3));

    rt_fix_init_i(&fix_1, 200);
    printf("%d * %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_1),
                             rt_fix_toi(rt_fix_mul(fix_1, fix_1)));

    rt_fix_init_i(&fix_1, -200);
    printf("%d * (%d) = %d\n", rt_fix_toi(fix_1),
                               rt_fix_toi(fix_1),
                               rt_fix_toi(rt_fix_mul(fix_1, fix_1)));

    rt_fix_init_d(&fix_1, M_PI);
    rt_fix_init_d(&fix_2, 0.707106781);
    printf("%f * %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_mul(fix_1, fix_2)));

    rt_fix_init_d(&fix_1, M_PI);
    rt_fix_init_d(&fix_2, -0.707106781);
    printf("%f * (%f) = %f\n", rt_fix_tod(fix_1),
                               rt_fix_tod(fix_2),
                               rt_fix_tod(rt_fix_mul(fix_1, fix_2)));

    rt_fix_init_d(&fix_1, -M_PI);
    rt_fix_init_d(&fix_2, 0.707106781);
    printf("%f * %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_mul(fix_1, fix_2)));

    rt_fix_init_d(&fix_1, M_PI);
    printf("%f * %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_1),
                             rt_fix_tod(rt_fix_mul(fix_1, fix_1)));

    rt_fix_init_i(&fix_1, -3);
    rt_fix_init_i(&fix_2, -1);
    printf("%d * %d = %d\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_toi(rt_fix_mul(fix_1, fix_2)));
    printf("\n");

    printf("Test of division:\n");
    printf("------------------\n");
    rt_fix_init_d(&fix_1, 0.);
    rt_fix_init_d(&fix_2, 0.);
    if(rt_fix_errtstset(fix_3 = rt_fix_div(fix_1, fix_2))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("%f / %f = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_2), rt_fix_tod(fix_3));


    rt_fix_init_d(&fix_1, 0.);
    rt_fix_init_d(&fix_2, 2.);
    printf("%f / %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));

    rt_fix_init_d(&fix_1, 0.865997);
    rt_fix_init_d(&fix_2, 0.5);
    printf("%f / %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, 1);
    rt_fix_init_d(&fix_2, 0.01);
    printf("%d / %f = %f\n", rt_fix_toi(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));

    rt_fix_init_i(&fix_1, -1);
    rt_fix_init_d(&fix_2, 0.01);
    printf("%d / %f = %f\n", rt_fix_toi(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));

    rt_fix_init_i(&fix_1, 1);
    rt_fix_init_d(&fix_2, -0.01);
    printf("%d / %f = %f\n", rt_fix_toi(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));

    rt_fix_init_i(&fix_1, 1);
    rt_fix_init_i(&fix_2, 2);
    printf("%d / %d = %f\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));
     
    rt_fix_init_i(&fix_1, 1);
    rt_fix_init_i(&fix_2, -3);
    printf("%d / (%d) = %f\n", rt_fix_toi(fix_1),
                               rt_fix_toi(fix_2),
                               rt_fix_tod(rt_fix_div(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, 2);
    rt_fix_init_i(&fix_2, 1);
    printf("%d / %d = %f\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, -3);
    rt_fix_init_i(&fix_2, 1);
    printf("%d / %d = %f\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, 200);
    rt_fix_init_i(&fix_2, 200);
    printf("%d / %d = %f\n", rt_fix_toi(fix_1),
                             rt_fix_toi(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));
    rt_fix_init_i(&fix_1, -200);
    rt_fix_init_i(&fix_2, -200);
    printf("%d / (%d) = %f\n", rt_fix_toi(fix_1),
                               rt_fix_toi(fix_2),
                               rt_fix_tod(rt_fix_div(fix_1, fix_2)));

    rt_fix_init_d(&fix_1, M_PI);
    rt_fix_init_d(&fix_2, 0.707106781);
    printf("%f / %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));
    rt_fix_init_d(&fix_1, M_PI);
    rt_fix_init_d(&fix_2, -0.707106781);
    printf("%f / (%f) = %f\n", rt_fix_tod(fix_1),
                               rt_fix_tod(fix_2),
                               rt_fix_tod(rt_fix_div(fix_1, fix_2)));
    rt_fix_init_d(&fix_1, -M_PI);
    rt_fix_init_d(&fix_2, 0.707106781);
    printf("%f / %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));
    rt_fix_init_d(&fix_1, M_PI);
    rt_fix_init_d(&fix_2, M_PI);
    printf("%f / %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));

    fix_1 =  rt_fix_max;
    rt_fix_init_d(&fix_2, 0.01);
    printf("%f / %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));

    fix_1 = rt_fix_min;
    rt_fix_init_d(&fix_2, 0.01);
    printf("%f / %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));

    fix_1 = rt_fix_max;
    rt_fix_init_d(&fix_2, 0.0);
    printf("%f / %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));

    fix_1 = rt_fix_min;
    rt_fix_init_d(&fix_2, 0.0);
    printf("%f / %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));

    rt_fix_init_d(&fix_1, 269167349);
    rt_fix_init_d(&fix_2, 269167349);
    printf("%f / %f = %f\n", rt_fix_tod(fix_1),
                             rt_fix_tod(fix_2),
                             rt_fix_tod(rt_fix_div(fix_1, fix_2)));
    printf("\n");
     

    printf("Test of y = frac(fix)\n");
    printf("---------------------\n");
    rt_fix_init_i(&fix_1, 7);
    rt_fix_init_i(&fix_2, 3);
    printf("frac(%f) = %f\n", rt_fix_tod(rt_fix_div(fix_1, fix_2)),
                              rt_fix_tod(rt_fix_frac(rt_fix_div(fix_1, fix_2))));
    rt_fix_init_d(&fix_1, 9.0072);
    rt_fix_init_i(&fix_2, -3);
    printf("frac(%f) = %f\n", rt_fix_tod(rt_fix_div(fix_1, fix_2)),
                              rt_fix_tod(rt_fix_frac(rt_fix_div(fix_1, fix_2))));
    rt_fix_init_d(&fix_1, 1. / 4.);
    printf("frac(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_frac(fix_1)));
    printf("\n");

    printf("Test of y = floor(fix)\n");
    printf("----------------------\n");
    rt_fix_init_d(&fix_1, 1. + (1. / 3.));
    printf("floor(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_floor(fix_1)));
    rt_fix_init_d(&fix_1, -1. - (1. / 3.));
    printf("floor(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_floor(fix_1)));
    printf("\n");

    printf("Test of y = ceil(fix)\n");
    printf("---------------------\n");
    rt_fix_init_d(&fix_1, 1. + (1. / 3.));
    printf("ceil(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_ceil(fix_1)));
    rt_fix_init_d(&fix_1, -1. - (1. / 3.));
    printf("ceil(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_ceil(fix_1)));
    printf("\n");

    printf("Test of y = abs(fix)\n");
    printf("--------------------\n");
    rt_fix_init_d(&fix_1, 1. + (1. / 3.));
    printf("abs(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_abs(fix_1)));
    rt_fix_init_d(&fix_1, -1. - (1. / 3.));
    printf("abs(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_abs(fix_1)));
    printf("\n");

    printf("Test of y = modf(fix, &integral_part)\n");
    printf("-------------------------------------\n");
    rt_fix_init_d(&fix_1, 1. + (1. / 3.));
    printf("modf(%f, &int_part) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_modf(fix_1, &fix_2)));
    printf("int_part = %f\n", rt_fix_tod(fix_2));
    rt_fix_init_d(&fix_1, -1. - (1. / 3.));
    printf("modf(%f, &int_part) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_modf(fix_1, &fix_2)));
    printf("int_part = %f\n", rt_fix_tod(fix_2));
    printf("\n");

    printf("Test of y = round(fix)\n");
    printf("----------------------\n");
    rt_fix_init_d(&fix_1, 0.3);
    printf("round(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_round(fix_1)));
    rt_fix_init_d(&fix_1, 0.5);
    printf("round(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_round(fix_1)));
    rt_fix_init_d(&fix_1, 0.6);
    printf("round(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_round(fix_1)));
    rt_fix_init_d(&fix_1, -0.3);
    printf("round(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_round(fix_1)));
    rt_fix_init_d(&fix_1, -0.5);
    printf("round(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_round(fix_1)));
    rt_fix_init_d(&fix_1, -0.6);
    printf("round(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_round(fix_1)));
    printf("\n");

    printf("Test of y = sqrt(fix)\n");
    printf("---------------------\n");
    rt_fix_init_i(&fix_1, 16);
    printf("sqrt(%d) = %f\n", rt_fix_toi(fix_1), rt_fix_tod(rt_fix_sqrt(fix_1)));
    rt_fix_init_i(&fix_1, 19);
    printf("sqrt(%d) = %f\n", rt_fix_toi(fix_1), rt_fix_tod(rt_fix_sqrt(fix_1)));
    rt_fix_init_i(&fix_1, 25);
    printf("sqrt(%d) = %f\n", rt_fix_toi(fix_1), rt_fix_tod(rt_fix_sqrt(fix_1)));
    rt_fix_init_mask(&fix_1, 3600, 31);
    printf("sqrt(%d) = %f\n", rt_fix_toi(fix_1), rt_fix_tod(rt_fix_sqrt(fix_1)));
    rt_fix_init_d(&fix_1, M_PI);
    printf("sqrt(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_sqrt(fix_1)));
    printf("\n");

    printf("Test of y = sin(fix)\n");
    printf("--------------------\n");
    rt_fix_init_d(&fix_1, 0.7853);
    printf("sin(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_sin(fix_1)));
    rt_fix_init_d(&fix_1, 16.3362);
    printf("sin(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_sin(fix_1)));
    rt_fix_init_d(&fix_1, 7.85398);
    printf("sin(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_sin(fix_1)));
    rt_fix_init_d(&fix_1, -0.7853);
    printf("sin(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_sin(fix_1)));
    rt_fix_init_d(&fix_1, -16.3362);
    printf("sin(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_sin(fix_1)));
    rt_fix_init_d(&fix_1, -7.85398);
    printf("sin(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_sin(fix_1)));
    printf("\n");

    printf("Test of y = asin(fix)\n");
    printf("---------------------\n");
    rt_fix_init_i(&fix_1, -1);
    printf("asin(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_asin(fix_1))); 
    rt_fix_init_i(&fix_1, 1);
    printf("asin(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_asin(fix_1))); 
    rt_fix_init_d(&fix_1, 0.5);
    printf("asin(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_asin(fix_1))); 
    rt_fix_init_d(&fix_1, 0.7071067);
    printf("asin(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_asin(fix_1))); 
    rt_fix_init_d(&fix_1, -0.7071067);
    printf("asin(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_asin(fix_1))); 
    printf("\n");

    printf("Test of y = cos(fix)\n");
    printf("--------------------\n");
    rt_fix_init_d(&fix_1, 0.7853);
    printf("cos(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_cos(fix_1)));
    rt_fix_init_d(&fix_1, 16.3362);
    printf("cos(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_cos(fix_1)));
    rt_fix_init_d(&fix_1, 7.85398);
    printf("cos(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_cos(fix_1)));
    rt_fix_init_d(&fix_1, -0.7853);
    printf("cos(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_cos(fix_1)));
    rt_fix_init_d(&fix_1, -16.3362);
    printf("cos(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_cos(fix_1)));
    rt_fix_init_d(&fix_1, -7.85398);
    printf("cos(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_cos(fix_1)));
    printf("\n");

    printf("Test of y = acos(fix)\n");
    printf("---------------------\n");
    rt_fix_init_i(&fix_1, -1);
    printf("acos(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_acos(fix_1))); 
    rt_fix_init_i(&fix_1, 1);
    printf("acos(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_acos(fix_1))); 
    rt_fix_init_d(&fix_1, 0.5);
    printf("acos(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_acos(fix_1))); 
    rt_fix_init_d(&fix_1, 0.7071067);
    printf("acos(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_acos(fix_1))); 
    rt_fix_init_d(&fix_1, -0.7071067);
    printf("acos(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_acos(fix_1))); 
    printf("\n");

    printf("Test of y = tan(fix)\n");
    printf("--------------------\n");
    rt_fix_init_i(&fix_1, 1);
    printf("tan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_tan(fix_1)));
    rt_fix_init_d(&fix_1, 0.785398163);
    printf("tan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_tan(fix_1)));
    rt_fix_init_d(&fix_1, 1.570796327);
    printf("tan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_tan(fix_1)));
    rt_fix_init_d(&fix_1, -1.570796327);
    printf("tan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_tan(fix_1)));
    rt_fix_init_d(&fix_1, -0.785398163);
    printf("tan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_tan(fix_1)));
    rt_fix_init_d(&fix_1, -1);
    printf("tan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_tan(fix_1)));
    printf("\n");

    printf("Test of y = atan(fix)\n");
    printf("--------------------\n");
    rt_fix_init_i(&fix_1, 1);
    printf("atan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_atan(fix_1)));
    rt_fix_init_d(&fix_1, 0.392699081);
    printf("atan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_atan(fix_1)));
    rt_fix_init_d(&fix_1, 1.414213562);
    printf("atan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_atan(fix_1)));
    rt_fix_init_d(&fix_1, 10.);
    printf("atan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_atan(fix_1)));
    rt_fix_init_i(&fix_1, -1);
    printf("atan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_atan(fix_1)));
    rt_fix_init_d(&fix_1, -0.392699081);
    printf("atan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_atan(fix_1)));
    rt_fix_init_d(&fix_1, -1.414213562);
    printf("atan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_atan(fix_1)));
    rt_fix_init_d(&fix_1, -10.);
    printf("atan(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_atan(fix_1)));
    printf("\n");

    printf("Test of y = exp(fix)\n");
    printf("--------------------\n");
    rt_fix_init_d(&fix_1, -0.9);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -0.5);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -0.1);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 0.1);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 0.5);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 0.9);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 2.785398163);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 0.5);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 3.5);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 3.6);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 19);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 20);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 21);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 22);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -2.785398163);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -0.5);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -3.5);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -3.6);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -19);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -20);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -21);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -22);
    if(rt_fix_errtstset(fix_3 = rt_fix_exp(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("exp(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));
    printf("\n");

    printf("Test of y = log(fix)\n");
    printf("--------------------\n");
    rt_fix_init_d(&fix_1, 0.001);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 0.01);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 0.5);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 0.75);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 1);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 1.5);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 2);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 7);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 50);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 500);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 5000);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 65536);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));


    rt_fix_init_d(&fix_1, 1048576);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 33554432);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, 269167349);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -0.001);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -0.01);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -10);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));

    rt_fix_init_d(&fix_1, -269167349);
    if(rt_fix_errtstset(fix_3 = rt_fix_log(fix_1))) {
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
    }
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_3));
    printf("\n");

    printf("Test of y = log2(fix)\n");
    printf("--------------------\n");
    rt_fix_init_d(&fix_1, 0.001);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    rt_fix_init_d(&fix_1, 0.01);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    rt_fix_init_d(&fix_1, 0.5);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    rt_fix_init_d(&fix_1, 0.75);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    rt_fix_init_d(&fix_1, 1);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    rt_fix_init_d(&fix_1, 1.5);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    rt_fix_init_d(&fix_1, 2);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    rt_fix_init_d(&fix_1, 7);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    rt_fix_init_d(&fix_1, 50);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    rt_fix_init_d(&fix_1, 500);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    rt_fix_init_d(&fix_1, 5000);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    rt_fix_init_d(&fix_1, -0.001);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    rt_fix_init_d(&fix_1, -0.01);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log2(fix_1)));
    printf("\n");

    printf("Test of y = log10(fix)\n");
    printf("--------------------\n");
    rt_fix_init_d(&fix_1, 0.001);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    rt_fix_init_d(&fix_1, 0.01);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    rt_fix_init_d(&fix_1, 0.5);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    rt_fix_init_d(&fix_1, 0.75);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    rt_fix_init_d(&fix_1, 1);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    rt_fix_init_d(&fix_1, 1.5);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    rt_fix_init_d(&fix_1, 2);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    rt_fix_init_d(&fix_1, 7);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    rt_fix_init_d(&fix_1, 50);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    rt_fix_init_d(&fix_1, 500);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    rt_fix_init_d(&fix_1, 5000);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    rt_fix_init_d(&fix_1, -0.001);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    rt_fix_init_d(&fix_1, -0.01);
    printf("log(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_log10(fix_1)));
    printf("\n");

    printf("Test of z = pow(fix, y)\n");
    printf("--------------------\n");
    rt_fix_init_d(&fix_1, 0.001);
    rt_fix_init_d(&fix_2, 3);
    printf("pow(%f, %f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_2), rt_fix_tod(rt_fix_pow(fix_1, fix_2)));
    rt_fix_init_d(&fix_1, 5);
    rt_fix_init_d(&fix_2, 3.5);
    printf("pow(%f, %f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_2), rt_fix_tod(rt_fix_pow(fix_1, fix_2)));
    rt_fix_init_d(&fix_1, -25.);
    rt_fix_init_d(&fix_2, 0.5);
    printf("pow(%f, %f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(fix_2), rt_fix_tod(rt_fix_pow(fix_1, fix_2)));
    printf("\n");

    printf("Test of z = sinh(fix)\n");
    printf("--------------------\n");
    rt_fix_init_d(&fix_1, 0.1);
    printf("sinh(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_sinh(fix_1)));
    rt_fix_init_d(&fix_1, 0.5);
    printf("sinh(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_sinh(fix_1)));
    rt_fix_init_d(&fix_1, 5);
    printf("sinh(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_sinh(fix_1)));
    printf("\n");

    printf("Test of z = cosh(fix)\n");
    printf("--------------------\n");
    rt_fix_init_d(&fix_1, 0.1);
    printf("cosh(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_cosh(fix_1)));
    rt_fix_init_d(&fix_1, 0.5);
    printf("cosh(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_cosh(fix_1)));
    rt_fix_init_d(&fix_1, 5);
    printf("cosh(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_cosh(fix_1)));
    printf("\n");

    printf("Test of z = tanh(fix)\n");
    printf("--------------------\n");
    rt_fix_init_d(&fix_1, 0.1);
    printf("tanh(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_tanh(fix_1)));
    rt_fix_init_d(&fix_1, 1);
    printf("tanh(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_tanh(fix_1)));
    rt_fix_init_d(&fix_1, 5);
    printf("tanh(%f) = %f\n", rt_fix_tod(fix_1), rt_fix_tod(rt_fix_tanh(fix_1)));
    printf("\n");

    printf("--------------------\n");
    rt_fix_init_i(&fix_1, -10);
    rt_fix_init_i(&fix_2, 1073741824);
    if(rt_fix_errtstset(fix_3 = rt_fix_mul(fix_2, rt_fix_log(fix_1)))) {
        if(rt_fix_errisset(fix_3, RT_FIX_UNDEFINED)) {
            printf("Result undefined\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_OV)) {
            printf("Result overflowed\t");
        }
        if(rt_fix_errisset(fix_3, RT_FIX_UV)) {
            printf("Result underflowed\t");
        }
    }
    printf("%d * log(%d) = %f\n", rt_fix_toi(fix_2), rt_fix_toi(fix_1), rt_fix_tod(fix_3));

#ifdef RT_FIXMISC
{
    char string_rep[RT_FIX_STR_REP_SIZE];

	memset(string_rep, '\0', sizeof(string_rep));
    printf("Testing String representation:\n");
    printf("------------------------------\n");
    rt_fix_init_d(&fix_1, 1.0 / 3.0);
    if(rt_fix_toa(fix_1, string_rep)) {
		printf("rt_fix_toa() failed\n");
	} else {
		printf("rt_fix_toa(rt_fix_init_d(1.0 / 3.0)) = %s\n", string_rep);
		rt_fix_atofix(&fix_1, string_rep);
		printf("fix = 0.333333; rt_fix_atofix(&fix, rt_fix_toa(fix)) = %f\n", rt_fix_tod(fix_1));
	}
    printf("\n");

    printf("Test of assignments\n");
    printf("-------------------\n");
    printf("assigning rt_fix to rt_fix:\n");
    rt_fix_init_mask(&fix_1, 0, 6);
    rt_fix_init_mask(&fix_2, 0, 3);
    printf("integer word length of fix_1 = %d, integer word length of fix_2 = %d.\n", 6, 3);
    rt_fix_assi(&fix_1, 30);
    rt_fix_assfix(&fix_2, fix_1);
    printf("fix_2 = fix_1 => %d = %d, \n", rt_fix_toi(fix_2), rt_fix_toi(fix_1));
    printf("overflow because fix_2 has integer word length of 3\n");
    rt_fix_init_i(&fix_1, 5);
    rt_fix_assfix(&fix_2, fix_1);
    printf("fix_2 = fix_1 => %d = %d\n", rt_fix_toi(fix_2), rt_fix_toi(fix_1));
    rt_fix_init_i(&fix_1, -30);
    rt_fix_assfix(&fix_2, fix_1);
    printf("fix_2 = fix_1 => %d = %d\n", rt_fix_toi(fix_2), rt_fix_toi(fix_1));
    printf("overflow because fix_2 has integer word length of 3\n");
    rt_fix_init_i(&fix_1, -5);
    rt_fix_assfix(&fix_2, fix_1);
    printf("fix_2 = fix_1 => %d = %d\n", rt_fix_toi(fix_2), rt_fix_toi(fix_1));
    printf("\n");

    printf("assigning integer to rt_fix:\n");
    rt_fix_assi(&fix_2, 40);
    printf("fix = %d => fix = %d\n", 40, rt_fix_toi(fix_2));
    rt_fix_assi(&fix_2, 7);
    printf("fix = %d => fix = %d\n", 7, rt_fix_toi(fix_2));
    rt_fix_assi(&fix_2, -40);
    printf("fix = %d => fix = %d\n", -40, rt_fix_toi(fix_2));
    rt_fix_assi(&fix_2, -7);
    printf("fix = %d => fix = %d\n", -7, rt_fix_toi(fix_2));
    printf("\n");
    printf("assigning long to rt_fix:\n");
    rt_fix_assl(&fix_2, 40);
    printf("fix = %d => fix = %ld\n", 40, rt_fix_tol(fix_2));
    rt_fix_assl(&fix_2, 7);
    printf("fix = %d => fix = %ld\n", 7, rt_fix_tol(fix_2));
    rt_fix_assl(&fix_2, -40);
    printf("fix = %d => fix = %ld\n", -40, rt_fix_tol(fix_2));
    rt_fix_assl(&fix_2, -7);
    printf("fix = %d => fix = %d\n", -7, rt_fix_tol(fix_2));
    printf("\n");

    printf("assigning double to rt_fix:\n");
    printf("---------------------------\n");
    rt_fix_assd(&fix_1, 40.);
    printf("fix = %f => fix = %f\n", 40., rt_fix_tod(fix_1));
    rt_fix_assd(&fix_1, 8.);
    printf("fix = %f => fix = %f\n", 8., rt_fix_tod(fix_1));
    rt_fix_assd(&fix_1, -40.);
    printf("fix = %f => fix = %f\n", -40., rt_fix_tod(fix_1));
    rt_fix_assd(&fix_1, -8.);
    printf("fix = %f => fix = %f\n", -8., rt_fix_tod(fix_1));
    printf("\n");

}
#endif /* RT_FIXMISC */

}

