static private void FastMul(BigNumber aa, BigNumber bb, BigNumber rr) { int ii, k, nexp, sign; BigNumber M_ain = new BigNumber(); BigNumber M_bin = new BigNumber(); BigNumber.Copy(aa, M_ain); BigNumber.Copy(bb, M_bin); int size_flag = GetSizeofInt(); int bit_limit = 8 * size_flag + 1; sign = M_ain.signum * M_bin.signum; nexp = M_ain.exponent + M_bin.exponent; if (M_ain.dataLength >= M_bin.dataLength) { ii = M_ain.dataLength; } else { ii = M_bin.dataLength; } ii = (ii + 1) >> 1; ii = NextPowerOfTwo(ii); k = 2 * ii; /* required size of result, in bytes */ BigNumber.Pad(M_ain, k); /* fill out the data so the number of */ BigNumber.Pad(M_bin, k); /* bytes is an exact power of 2 */ if (k > rr.mantissa.Length) { BigNumber.Expand(rr, (k + 32)); } BigNumber.FastMulFFT(rr.mantissa, M_ain.mantissa, M_bin.mantissa, ii); rr.signum = (sbyte)sign; rr.exponent = nexp; rr.dataLength = 4 * ii; BigNumber.Normalize(rr); }