#符号 #算术 # #

arithmetic-sign

算术 Sign(≈+1|-1) 与算术类型如 f64i32 之间的转换工具

1 个稳定版本

1.0.0 2020 年 9 月 14 日

#1382数学

22 每月下载量
lonlat 中使用

MIT 许可证

10KB
336

Arithmetic-sign

算术 Sign(≈+1|-1) 与算术类型如 f64i32 之间的转换工具。

特性

  • FromTryFrom:算术类型如 f64i32 可以转换为 Sign
    • From:对于整型如 i32,没有无限模式。
    • TryFrom:对于浮点型如 f64,有 +inf、-inf 和 NaN 无限模式。
      • 有限、+inf、-inf 有效 => Ok,nan 无效 => Err
  • as_TSign 可以转换为算术类型如 f64i32
    • as_uT:安全无符号转换。例如,正数 => Ok,负数 => Err
  • DisplaySign 可以转换为字符串 "-" 或 "+"
    • Sign =(to_string_specified("S", "N"))> "S" 或 "N"
  • MulDiv符号 * 符号符号 / 符号符号;例如,负 * 负 → 正,正 / 负 → 负
  • NegNot-符号!符号符号;例如,-负 → 正,!正 → 负
  • 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}::copysignstd::*::signum,被视为从 -0.0 到负数的符号。
    • 但是,作者希望将“非负”视为从 0.0-0.0 的“正数”。
    • 作者还希望有一个类似布尔类型的类型,例如“正数”和“负数”,它只有两个变体。
    • 无穷大是一个有效的有符号值,NaN 不是一个有效的值。

许可证

作者

依赖项

~295–760KB
~18K SLoC