我正在通过编写和改进我自己的BigInt库来学习计算机数学.到目前为止,我的第一个化身将一个基数为10的数字存储在向量的连续元素中.它可以以任意精度相乘和相加.我想通过转换为base 2 ^ x来使用标准C++数据类型中可用的所有空间来加快速度.
我正在从基数10中的stdin读取1000或更多数字,我希望将它们转换为基数2 ^ x,因此我可以将它们容易地存储在标准C++数据类型之一的数组或向量中,可能是unsigned int.关于如何进行基本转换,使用余数方法重复除法,我只有一个想法.这是一些描述该方法的C++代码:
vector<int> digits;
while(num!=0) {
int mod = num%base;
num = num/base;
digits.push_back(mod);
}
Run Code Online (Sandbox Code Playgroud)
我遗失的一些事情是,与余数的划分是否是在大整数上进行基数转换的正确方法.我试过看看GMP库是如何做到的.gmp/mpn/generic/set_str.c是相关的c源文件,其中"魔术"发生了,但我不确定那里发生了什么.Matt McCutchen的BigInt似乎使用了余数方法的重复除法.如果我使用这种方法,我基本上需要编写两个版本的BigInt类,一个用于Base10,另一个用于Base2 ^ x.
我们要存储的数量(显然是小尺寸):123456789
unsigned chars的范围是0-255,如果我们想要分割我们的数字并将它存储在向量中,我们可以用以下三种方式之一:
显然,第三种解决方案对于内部表示来说是最优化的,而且正是我想要达到的目标.
过去几天我一直在修补Twisted,不到一个月前就已经拿起了python.我的第一个倾向是玩我知道并每天使用的东西,IRC.由于ircLogBot.py示例,我已经启动并运行了基本的IRC连接.
我希望在收到IRC事件(PRIVMSG/CTCP/JOIN/PART)时运行一些任意代码,为了调试,我希望能够对这段代码进行更改,然后重新加载关闭整个脚本并重新连接到IRC服务器.
它不一定是包含Twisted的解决方案,因为我还没有完全理解它.虽然我认为这是一种扭曲的事情,作为一个事件驱动的框架,可能会做得很好.