Expand description
Arithmetic trait and its implementations.
§Traits
An Arithmetic defines fallible arithmetic operations on primitive values
of an ExecutableModule, namely, addition, subtraction, multiplication, division,
exponentiation (all binary ops), and negation (a unary op). Any module can be run
with any Arithmetic on its primitive values, although some modules are reasonably tied
to a particular arithmetic or a class of arithmetics (e.g., arithmetics on finite fields).
OrdArithmetic extends Arithmetic with a partial comparison operation
(i.e., an analogue to PartialOrd). This is motivated by the fact that comparisons
may be switched off during parsing, and some Arithmetics do not have well-defined comparisons.
ArithmeticExt helps converting an Arithmetic into an OrdArithmetic.
§Implementations
This module defines the following kinds of arithmetics:
StdArithmetictakes all implementations from the correspondingopstraits. This means that it’s safe to use provided the ops are infallible. As a counter-example, usingStdArithmeticwith built-in integer types (such asu64) is usually not a good idea since the corresponding ops have failure modes (e.g., division by zero or integer overflow).WrappingArithmeticis defined for integer types; it uses wrapping semantics for all ops.CheckedArithmeticis defined for integer types; it uses checked semantics for all ops.ModularArithmeticoperates on integers modulo the specified number.
All defined Arithmetics strive to be as generic as possible.
Structs§
- Checked
- Marker for
CheckedArithmeticsignalling that negation should be inherited from theCheckedNegtrait. - Checked
Arithmetic - Arithmetic on an integer type (e.g.,
i32) that checks overflow and other failure conditions for all operations. - Full
Arithmetic - Wrapper type allowing to extend an
Arithmeticto anOrdArithmeticimplementation. - Modular
Arithmetic - Modular arithmetic on integers.
- Negate
Only Zero - Marker for
CheckedArithmeticsignalling that negation is only possible for zero. - StdArithmetic
- Arithmetic on a number type that implements all necessary operations natively.
- Unchecked
- Marker for
CheckedArithmeticsignalling that negation should be inherited from theNegtrait. This is appropriate ifNegnever panics (e.g., for signed big integers). - Wrapping
Arithmetic - Arithmetic on an integer type (e.g.,
i32), in which all operations have wrapping semantics.
Traits§
- Arithmetic
- Encapsulates arithmetic operations on a certain primitive type (or an enum of primitive types).
- Arithmetic
Ext - Extension trait for
Arithmeticallowing to combine the arithmetic with comparisons. - Checked
Arithmetic Kind - Helper trait for
CheckedArithmeticdescribing how number negation should be implemented. - Double
Width - Encapsulates extension of an unsigned integer type into signed and unsigned double-width types. This allows performing certain operations (e.g., multiplication) without a possibility of integer overflow.
- OrdArithmetic
- Extends an
Arithmeticwith a comparison operation on values.