5 个版本

0.1.5 2023年3月20日
0.1.3 2020年1月19日
0.1.2 2019年12月26日
0.1.1 2019年2月8日
0.1.0 2019年2月7日

#1048算法


2 个 crate 中使用(通过 hacspec-lib

Apache-2.0 协议

43KB
978 代码行

此 crate 定义了具有上界的、适用于规范的天然整数类型。这些整数的操作可以定义为模运算(模上界)或常规运算(在溢出或下溢时引发恐慌)。

由于每个整数都有自己的 Rust 类型,编译器可以检测并防止所有定义的不同整数之间的混合。

定义新的整数类型

以下宏用于定义此 crate 的 SizeNatExample 类型

define_abstract_integer_checked!(SizeNatExample, 64);

SizeNat 是新创建的类型名称。 64 是该类型的机器表示法中的位数。从位数可以推导出整数的上界,对所有操作都检查溢出。结果整数类型是可复制的,并支持加法、减法、乘法、整数除法、余数、比较和相等。 from_literal 方法允许您将整数文字转换为您的新的类型。

为模运算优化整数类型

在先前定义的抽象整数的基础上,您可以定义另一个类型,该类型允许您实现模运算。例如,此 crate 使用第9个梅森素数定义了算术字段

define_refined_modular_integer!(
  SizeNatFieldExample,
  SizeNatExample,
  SizeNatExample::pow2(61) - SizeNatExample::from_literal(1)
);

此新宏的第一个参数是新定义的优化类型的名称。第二个参数是作为表示形式作用的基抽象整数的名称。第三个参数是所有操作中的模数,定义为基类型的值。

依赖项

~745KB
~16K SLoC