8 个版本 (破坏性更新)

0.7.0 2023年12月5日
0.6.2 2019年11月10日
0.5.0 2018年1月27日
0.4.0 2018年1月27日
0.1.0 2017年11月11日

#277 in 数学

MIT/Apache

42KB
971

Bounds

Build Status crates.io

文档

Bounds 库包含一个下界/上界,它可以是 [无界、包含、排除] 之一。它还支持零大小的边界(一个确切值)。

您可以在这些范围内使用四种基本算术运算。(加、减、乘、除)

实现细节

这个库遵循“真实”数学,不尊重整数数学(溢出/下溢),或浮点精度问题。它被设计为与 BigRational 一起使用,但它很通用,因此也可以与其他类型一起使用。如果与此可以溢出的类型一起使用,则不提供任何保证。

下界必须始终低于上界。在调试模式下运行时,偶尔会有内部检查,但确保在创建时所有边界都有效是调用者的责任。

此库永远不会导致除以零(在这种情况下,除法返回 None),并且如果输入有效且使用的泛型类型也不会崩溃,则不会崩溃。

Rust 的内置边界不允许下界为排除,因此提供了一个宏以方便使用。使用前缀 ~ 来创建一个排除的边界。默认情况下它是包含的

bounds!(,); // unbounded
bounds!(~0, 3); // > 0 and <= 3
bounds!(3,); // >= 3
bounds!(-3); // exactly -3

示例

use bounds::*;

assert!(bounds!(2, 4).intersects(&bounds!(1, 3)));
assert_eq!(
    bounds!(6) / bounds!(2,), 
    Some(bounds!(~0,3))
);

依赖项

~465KB