1个稳定版本
1.0.0 | 2024年2月8日 |
---|
#1191 在 数学
12KB
124 行
kahan_pairs
生成整数对。
该crate实现了Kahan教授描述的算法,用于枚举正整数对。
lib.rs
:
生成整数对。
该crate实现了Kahan教授描述的算法,用于枚举正整数对。
正确性
该crate返回的结果对于所有小于等于2^52的
n
值都是正确的。对于大于此值的n
值,由于浮点数精度问题,结果可能不正确。
no-std
支持
该crate有两个功能:std
和libm
。这两个功能是互斥的,如果同时启用这两个功能,或者都不启用,将导致编译错误。
std
功能默认启用,允许crate使用f64的sqrt
和trunc
内联函数,这对于算法的某些步骤是必要的。如果希望在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