[疑难] 关于 std.bigint
Colorful
2008-07-14
不知道诸君有没有使用过 std.bigint ?
我在使用的时候,如果 import std.bigint,死活不能编译成功,爆了一大堆符号未定义的错误,也不知道该如何修改。 把 std.bigint 的内容放入同项目的文件夹下,倒是可以编译了,但是有内存泄露,查看任务管理器,程序占用几十M,但是总的内存占用疯长,且CPU占用 100%(这倒无所谓,因为大数计算属于密集型计算),更别提能不能出结果了,直接吐血。 还望牛人指点迷津。 测试环境: Windows XP SP3 + DMD 2.017 测试代码如下: import std.bigint; extern(Windows) bool QueryPerformanceCounter(ref long); void main() { long j,k,ticks; QueryPerformanceCounter(ticks); j = ticks; BigInt a = 2; BigInt b = 0; for (int i = 2; i <= 20; i++, a *= b) { b = a + i; } QueryPerformanceCounter(ticks); k = ticks; printf("Time:%d, Value:%*s\n", (k-j) / (10000*1000), a.toString()); } |
|
hqs7636
2008-07-15
够新的啊,牛!
|
|
oldrev
2008-07-15
试试 linux?
|
|
tomqyp
2008-07-15
wind里好像有个bigint类,我自己也转过一个C++的bigint类,不过可能会有BUG如果需要可以发给你一份。
|
|
Colorful
2008-07-16
@oldrev
老大在 Linux 下的测试结果如何? @tomqyp 前几天看了几个 BigInteger 实现,而且有文章进行了性能测试。 俺本来想看下 D 的 bigint 性能是否能够跟它们媲美,或者说比他们更好。 但没想到是这么个结果。 老兄给我发一份吧, e-Mail: 786325481 at qq.com 有空我也改写一个,一块测试一下。 PS: std.bigint 的代码使用嵌入汇编,根据注释所说,是经过优化的。且不说保证跨平台,我猜测至少 x86/x64 平台结果应该是一样的。 |
|
oldrev
2008-07-16
新换了 opensuse11,还没来得及装 dmd
|
|
tomqyp
2008-07-17
代码在家里的电脑上,晚上发给你吧
之前看过一些大数类,大多都尽量利用系统可用的最大位宽来提高效率,比如使用0xFFFFFFFF进制,所以如果代码支持的话x86和x64平台下的结果差距应该会是比较大的吧. |
|
oldrev
2008-07-17
tomqyp 写道 代码在家里的电脑上,晚上发给你吧
之前看过一些大数类,大多都尽量利用系统可用的最大位宽来提高效率,比如使用0xFFFFFFFF进制,所以如果代码支持的话x86和x64平台下的结果差距应该会是比较大的吧. 应该是 0xFFFFFFFF+1进制吧 |
|
tomqyp
2008-07-17
呵呵 对应该是0xFFFFFFFF+1进制
其实我之前也想过,如果写0x100000000进制很容易让人迷糊,为什么要用0x100000000进制,而不是0x10或都0x1000进制 |
|
hqs7636
2008-07-21
dwin.math.bigint.Bigint
看看这个 |