[疑难] 关于 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
看看这个
Global site tag (gtag.js) - Google Analytics