예제 #1
0
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");
}
예제 #2
0
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;
}