1 个稳定版本
| 1.0.0 | 2020 年 9 月 14 日 |
|---|
#1382 在 数学
22 每月下载量
在 lonlat 中使用
10KB
336 行
Arithmetic-sign
算术 Sign(≈+1|-1) 与算术类型如 f64、i32 之间的转换工具。
特性
-
From和TryFrom:算术类型如f64、i32可以转换为Sign-
From:对于整型如i32,没有无限模式。 -
TryFrom:对于浮点型如f64,有 +inf、-inf 和 NaN 无限模式。- 有限、+inf、-inf 有效 =>
Ok,nan 无效 =>Err。
- 有限、+inf、-inf 有效 =>
-
-
as_T:Sign可以转换为算术类型如f64、i32-
as_uT:安全无符号转换。例如,正数 => Ok,负数 => Err
-
-
Display:Sign可以转换为字符串 "-" 或 "+"-
Sign=(to_string_specified("S", "N"))> "S" 或 "N"
-
-
Mul和Div:符号 * 符号或符号 / 符号→符号;例如,负 * 负 → 正,正 / 负 → 负 -
Neg和Not:-符号或!符号→符号;例如,-负 → 正,!正 → 负 -
Eq:符号==|!=符号;例如,负 == 负 → 真,正 != 负 → 真 -
Ord:符号<|<=|>=|>符号;例如,负 < pos → 真,正 >= 正 → 真,负 > 正 → 假
用法
- 另请参阅:[tests/test.rs](https://github.com/usagi/arithmetic-sign/blob/6c4c2108c25fc03c1446565c044a6b973259681a/tests/test.rs)。
use arithmetic_sign::*;
let _sign = Sign::from( 123 ); // -> Sign::Positive
let _sign = Sign::from( 0 ); // -> Sign::Positive
let _sign = Sign::from( -0 ); // -> Sign::Positive
let _sign = Sign::from( -123 ); // -> Sign::Negative
let _sign_maybe = Sign::try_from( 1.23 ); // -> Ok( Sign::Positive )
let _sign_maybe = Sign::try_from( 0.0 ); // -> Ok( Sign::Positive )
let _sign_maybe = Sign::try_from( -0.0 ); // -> Ok( Sign::Positive )
let _sign_maybe = Sign::try_from( 1.23 ); // -> Ok( Sign::Negative )
let _sign_maybe = Sign::try_from( std::f64::inf() ); // -> Ok( Sign::Positive )
let _sign = Sign::from( -123 ) * Sign::from( 123 ); // -> Sign::Negative
let _sign = !Sign::from( -123 ); // -> Sign::Positive
let _f64 = Sign::Positive.as_f64(); // 1f64
let _i32 = Sign::Negative.as_i32(); // -1i32
let _u8 = Sign::Positive.as_u8().unwrap(); // 1u8
let _u8 = Sign::Negative.as_u8().is_err(); // true
动机
- 标准库中的符号特性,如
std::{f32|f64}::copysign或std::*::signum,被视为从-0.0到负数的符号。- 但是,作者希望将“非负”视为从
0.0到-0.0的“正数”。 - 作者还希望有一个类似布尔类型的类型,例如“正数”和“负数”,它只有两个变体。
- 无穷大是一个有效的有符号值,NaN 不是一个有效的值。
- 但是,作者希望将“非负”视为从
许可证
作者
依赖项
~295–760KB
~18K SLoC