#hash #order #comparison #equality #num-bigint #numeric #hash-values

无需std num-order

为各种u32f64num_bigint::BigIntnum类型提供数值一致的EqOrdHash实现

11个版本 (6个稳定版)

1.2.0 2023年8月31日
1.1.0 2023年8月29日
1.0.4 2022年5月24日
1.0.3 2022年4月17日
0.0.1 2022年3月5日

#163数学

Download history 971/week @ 2024-04-08 765/week @ 2024-04-15 747/week @ 2024-04-22 871/week @ 2024-04-29 314/week @ 2024-05-06 367/week @ 2024-05-13 400/week @ 2024-05-20 435/week @ 2024-05-27 393/week @ 2024-06-03 361/week @ 2024-06-10 518/week @ 2024-06-17 394/week @ 2024-06-24 365/week @ 2024-07-01 514/week @ 2024-07-08 467/week @ 2024-07-15 444/week @ 2024-07-22

1,838每月下载
用于11个Crates (6个直接使用)

Apache-2.0

97KB
2K SLoC

数值一致的EqOrdHash实现,适用于各种num类型(u32f64num_bigint::BigInt等)。

示例

use std::cmp::Ordering;
use std::hash::Hasher;
use std::collections::hash_map::DefaultHasher;
use num_order::{NumOrd, NumHash};

assert!(NumOrd::num_eq(&3u64, &3.0f32));
assert!(NumOrd::num_lt(&-4.7f64, &-4i8));
assert!(!NumOrd::num_ge(&-3i8, &1u16));

// 40_000_000 can be exactly represented in f32, 40_000_001 cannot
// 40_000_001 becames 40_000_000.0 in f32
assert_eq!(NumOrd::num_cmp(&40_000_000f32, &40_000_000u32), Ordering::Equal);
assert_ne!(NumOrd::num_cmp(&40_000_001f32, &40_000_001u32), Ordering::Equal);
assert_eq!(NumOrd::num_partial_cmp(&f32::NAN, &40_000_002u32), None);

// same hash values are guaranteed for equal numbers
let mut hasher1 = DefaultHasher::new();
3u64.num_hash(&mut hasher1);
let mut hasher2 = DefaultHasher::new();
3.0f32.num_hash(&mut hasher2);
assert_eq!(hasher1.finish(), hasher2.finish())

依赖项

~145–315KB