1个稳定版本

1.0.0 2024年2月8日

#1191数学

Apache-2.0

12KB
124

kahan_pairs

crate documentation

生成整数对。

该crate实现了Kahan教授描述的算法,用于枚举正整数对。


lib.rs:

生成整数对。

该crate实现了Kahan教授描述的算法,用于枚举正整数对。

正确性

该crate返回的结果对于所有小于等于2^52n值都是正确的。对于大于此值的n值,由于浮点数精度问题,结果可能不正确。

no-std支持

该crate有两个功能:stdlibm。这两个功能是互斥的,如果同时启用这两个功能,或者都不启用,将导致编译错误。

std功能默认启用,允许crate使用f64的sqrttrunc内联函数,这对于算法的某些步骤是必要的。如果希望在no-std环境中运行,可以禁用std功能,并启用libm功能,这将用libm中的等效函数替换上述内联函数的使用。

用法

use kahan_pairs::pairs;

let mut pairs = pairs();

assert_eq!(pairs.next(), Some((1, 1)));
assert_eq!(pairs.next(), Some((1, 2)));
assert_eq!(pairs.next(), Some((2, 1)));
assert_eq!(pairs.next(), Some((1, 3)));
assert_eq!(pairs.next(), Some((2, 2)));

从0开始而不是1

use kahan_pairs::pairs_0;

let mut pairs = pairs_0();

assert_eq!(pairs.next(), Some((0, 0)));
assert_eq!(pairs.next(), Some((0, 1)));
assert_eq!(pairs.next(), Some((1, 0)));
assert_eq!(pairs.next(), Some((0, 2)));
assert_eq!(pairs.next(), Some((1, 1)));

计算任何n

use kahan_pairs::nth_pair;

assert_eq!(nth_pair(100), (9, 6));
assert_eq!(nth_pair(99_999), (318, 130));

use kahan_pairs::nth_pair_0;

assert_eq!(nth_pair_0(105), (13, 0));
assert_eq!(nth_pair_0(99_999), (317, 129));

依赖项

~105KB