Application of the identity matrix II. v05
Submitted By:
xhunga
Rating:





(
Rate It)
/* xbfract.h freeware [[Email Removed]] */
/* ------------------------------ FUNCTION ------------------------- */
/* Do : miniF[(a*c)/(b*c)] = (a)/(b) */
/* if numerator = 0, the fraction is write 0 = 0/1 */
/* Call : fmod() */
/* Debug : printmF(m); getchar(); */
/* printf(" %.1f / %d \n\n",t,tnb1er[nb1er]); getchar(); */
/* -------------------------------------------------------------------------- */
fraction miniF(
fraction f)
{
int nb1er = FIRSTNB1ER;
int ttrue = 1;
if(f.numer == f.denom)
{f.numer = 1;
f.denom = 1;}
if( ((f.numer) > 1000000000000000) && ( ((f.numer)-(f.denom)) < 2 ))
{f.numer = 1;
f.denom = 1;}
while(nb1er < LASTNB1ER)
{
ttrue = 1;
while(ttrue) /* ttrue = 1 try tnb1er[nb1er ] */
{ /* ttrue = 0 try tnb1er[nb1er + 1] */
if( fmod(f.numer,tnb1er[nb1er]) != 0 || fmod(f.denom,tnb1er[nb1er]) != 0)
{
ttrue = 0;
}
if( tnb1er[nb1er] > fabs(f.numer) || tnb1er[nb1er] > fabs(f.denom) )
{
nb1er = LASTNB1ER;
ttrue = 0;
}
/* ttrue = 1 divide by tnb1er[nb1er] */
if(ttrue)
{
f.numer = f.numer / tnb1er[nb1er];
f.denom = f.denom / tnb1er[nb1er];
}
}
nb1er++;
}
if(f.denom < 0 )
{
f.numer = -1 * (f.numer);
f.denom = -1 * (f.denom);
}
if(!f.numer){f.denom = 1;}
return(f);
}
/* ------------------------------ FUNCTION --------------------------- addf() */
/* -------------------------------------------------------------------------- */
fraction addF(
fraction f1,
fraction f2)
{
f1 = miniF(f1);
f2 = miniF(f2);
f1.numer = (f1.numer)*(f2.denom) + (f2.numer)*(f1.denom);
f1.denom = (f1.denom)*(f2.denom);
return(miniF(f1));
}
/* ------------------------------ FUNCTION --------------------------- subF() */
/* -------------------------------------------------------------------------- */
fraction subF(
fraction f1,
fraction f2)
{
f1 = miniF(f1);
f2 = miniF(f2);
f1.numer = (f1.numer)*(f2.denom) - (f2.numer)*(f1.denom);
f1.denom = (f1.denom)*(f2.denom);
return(miniF(f1));
}
/* ------------------------------ FUNCTION -------------------------- multF() */
/* -------------------------------------------------------------------------- */
fraction multF(
fraction f1,
fraction f2)
{
f1 = miniF(f1);
f2 = miniF(f2);
f1.numer = (f1.numer)*(f2.numer);
f1.denom = (f1.denom)*(f2.denom);
return(miniF(f1));
}
/* ------------------------------ FUNCTION --------------------------- divF() */
/* -------------------------------------------------------------------------- */
fraction divF(
fraction f1,
fraction f2)
{
if (!f2.numer)
{
printf("\n divF() error - 0 no inverse");
printf("\n Press return to continue");
getchar();
exit(1);
}
f1 = miniF(f1);
f2 = miniF(f2);
f1.numer = (f1.numer)*(f2.denom);
f1.denom = (f1.denom)*(f2.numer);
return(miniF(f1));
}
/* ------------------------------ FUNCTION --------------------------- invF() */
/* -------------------------------------------------------------------------- */
fraction invF(
fraction f)
{
double T;
if (!f.numer)
{
printf("\n invF() error - 0 no inverse");
printf("\n Press return to continue");
getchar();
exit(1);
}
f = miniF(f);
T = f.numer;
f.numer = f.denom;
f.denom = T;
return(miniF(f));
}