diff options
author | Erik Kundt <bitshift@posteo.org> | 2018-09-18 18:30:57 +0800 |
---|---|---|
committer | Erik Kundt <bitshift@posteo.org> | 2018-09-26 23:19:40 +0800 |
commit | d47ea5bb4784b69e71a905f853cde972ed40ad52 (patch) | |
tree | e168f2ff80e6117bc70bb44cd46fb26f7f8fb139 | |
parent | fcb48bceffa54cf8cb79f6d8e03d875277f535ff (diff) | |
download | dexon-solidity-d47ea5bb4784b69e71a905f853cde972ed40ad52.tar.gz dexon-solidity-d47ea5bb4784b69e71a905f853cde972ed40ad52.tar.zst dexon-solidity-d47ea5bb4784b69e71a905f853cde972ed40ad52.zip |
Documents modulus semantics.
-rw-r--r-- | docs/types.rst | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/docs/types.rst b/docs/types.rst index 37ccd329..23336624 100644 --- a/docs/types.rst +++ b/docs/types.rst @@ -86,8 +86,8 @@ They wrap in two's complement notation, meaning that for example ``uint256(0) - uint256(1) == 2**256 - 1``. You have to take these overflows into account when designing safe smart contracts. -Division and Modulus -^^^^^^^^^^^^^^^^^^^^ +Division +^^^^^^^^ Since the type of the result of an operation is always the type of one of the operands, division on integers always results in an integer. @@ -96,7 +96,23 @@ In Solidity, division rounds towards zero. This mean that ``int256(-5) / int256( Note that in contrast, division on :ref:`literals<rational_literals>` results in fractional values of arbitrary precision. -Division by zero and modulus with zero throws a runtime exception. +.. note:: + Division by zero causes a failing assert. + +Modulo +^^^^^^ + +The modulo operation ``a % n`` yields the remainder ``r`` after the division of the operand ``a`` +by the operand ``n``, where ``q = int(a / n)`` and ``r = a - (n * q)``. This means that modulo +results in the same sign as its left operand (or zero) and ``a % n == -(abs(a) % n)`` holds for negative ``a``: + + * ``int256(5) % int256(2) == int256(1)`` + * ``int256(5) % int256(-2) == int256(1)`` + * ``int256(-5) % int256(2) == int256(-1)`` + * ``int256(-5) % int256(-2) == int256(-1)`` + +.. note:: + Modulo with zero causes a failing assert. Exponentiation ^^^^^^^^^^^^^^ |