void FindNthRoot(unsigned long M, unsigned N, unsigned prec) { unsigned long min, max, t; unsigned m; int searching=1; long sign; //=(1L<<(sizeof(unsigned long)*8-1)); min=1; max=M; t=(min+max)/N; int ops=0; for(m=1; m<=prec+1; m++) { while(min<t && t<max && searching) { ops++; PrintIterates(t,m-1); unsigned long tRaisedToN; tRaisedToN = Exponentiation(t,N); sign = tRaisedToN - M; if(sign < 0L) sign = -1L; else if(sign > 0L) sign = 1L; switch(sign) { case -1L: min = t; break; case 0L: searching = 0; break; case 1L: max = t; break; } t=(min+max)/2; } if(m <= prec+1) { t *= 10; min = t-10; max = t+10; M *= Exponentiation(10,N); } } printf("\n"); }
void CallFunction(FunctionCall fc) { int function = GetFunction(fc->function); switch (function) { case VAR : NewVariable(fc); break; case NMX : NewMatrix(fc); break; case ADD : Addition(fc); break; case SUB : Substraction(fc); break; case MUL : Multiplication(fc); break; case MSC : Scalar_Mult(fc); break; case EXP : Exponentiation(fc); break; case TRA : Transpose(fc); break; case DET : Determinant(fc); break; case DLU : Decomposition(fc); break; case SOL : Solve(fc); break; case INV : Inversion(fc); break; case RNK : Rank(fc); break; case DSP : Display(fc); break; case NOF : // default default : { if (GetFunction(fc->name)==SPT) SpeedTest(fc); else if (IndexVariable(fc->function)!=-1) NewVariable(fc); else if (IndexMatrix(fc->function)!=-1) NewMatrix(fc); else { printf("\t%s : Function Not Implemented\n", fc->function); fni++; } break; } } if (function!=NOF && function !=VAR) fni = 0; }