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 数学
42KB
971 行
Bounds
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