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