gpt4 book ai didi

测试 bignum 算术

转载 作者:行者123 更新时间:2023-11-28 19:57:26 30 4
gpt4 key购买 nike

我正在编写一个任意精度的有理数包,我需要测试它的正确性和效率。当然,我可以自己组合一组临时测试,但由于我远不是第一个这样做的人,所以我认为值得一问:任何人都可以推荐我可以使用的现有测试集吗?

编辑:我最终编写了一个测试例程,每次循环都会生成三个随机数并验证各种算术恒等式是否成立。到目前为止,它在数字代码中发现了几个错误。这是实际的代码:

for (i = 0;; i++)
{
mem = memlo;
printf(fmtw "\r", i);

a = rndnum();
b = rndnum();
c = rndnum();

// Equality
test(eq(a, a));
test(!eq(a, b) || !eq(b, c) || eq(a, c));

// Addition
test(eq(add(add(a, b), c), add(a, add(b, c))));
test(eq(add(a, b), add(b, a)));
test(eq(add(a, zero), a));

// Subtraction
test(eq(sub(add(a, b), b), a));
test(sub(a, a) == zero);
test(eq(sub(a, b), add(a, sub(zero, b))));

// Multiplication
test(eq(mul(mul(a, b), c), mul(a, mul(b, c))));
test(eq(mul(a, b), mul(b, a)));
test(eq(mul(a, one), a));
test(eq(mul(a, add(b, c)), add(mul(a, b), mul(a, c))));

// Division
test(b == zero || eq(div_(mul(a, b), b), a));
test(a == zero || div_(a, a) == (one));
test(b == zero || eq(div_(a, b), mul(a, div_(one, b))));
test(c == zero
|| eq(div_(sub(a, b), c), sub(div_(a, c), div_(b, c))));

// I/O
test(eq(a, roundtrip(a)));
}

最佳答案

尝试查看开源 Rational 实现的单元测试。 Ruby 的 rational 支持任意精度,尽管 test/ruby/test_rational2.rb 中只有少数测试超过 32 位。例如:

assert_equal(Rational(2305842940494218450, 1152921470247108503),
Rational(1073741789, 1073741827) + Rational(1073741827, 1073741789))

与 Python 的 test_fractions.py 类似:

 self.assertTypedEquals(10**23, 10**22 // F(1, 10))

GNU MPL有一些主要基于随机数的合理单元测试。

IMath包有一套很好的测试,例如:

qadd:-14,9/2,-20:-19/2
qadd:-60,=1,43/2:-120
qadd:375/18696391582109365451,-131/32949770573031503434,166/56750232802998421883:9906936667630486913669/616041813174061083543307811398267458734
qadd:615/80348516296708248277,=1,=2:1230/80348516296708248277

我不太清楚其他开源 Rational bignum 包(如 Scheme 和 Sage)是如何测试的,但如果你有动力,他们的测试应该存在于某个地方。

关于测试 bignum 算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5341748/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com