Pure Nim implementations of arithmetic operations for integers.
Procs
func borrowingSub[T: SomeSignedInt](a, b: T; borrowIn: bool): (T, bool) {. ...raises: [], inline, noinit, ...gcsafe.}
- Source Edit
func borrowingSub[T: SomeUnsignedInt](a, b: T; borrowIn: bool): (T, bool) {. ...raises: [], inline, noinit, ...gcsafe.}
- Source Edit
func carryingAdd[T: SomeSignedInt](a, b: T; carryIn: bool): (T, bool) {. ...raises: [], inline, noinit, ...gcsafe.}
- Source Edit
func carryingAdd[T: SomeUnsignedInt](a, b: T; carryIn: bool): (T, bool) {. ...raises: [], inline, noinit, ...gcsafe.}
- Source Edit
func narrowingDiv(uHi, uLo, v: uint32): (uint32, uint32) {....raises: [], inline, noinit, ...gcsafe, tags: [], forbids: [].}
-
Division uint64 by uint32.
Warning:
- if uHi == d, quotient does not fit in an uint32
- if uHi > d result is undefined
To avoid issues, uHi, uLo, and v are normalized i.e. shifted (== multiplied by the same power of 2) so that the most significant bit in d is set.
Source Edit func narrowingDiv(uHi, uLo, v: uint64): (uint64, uint64) {....raises: [], inline, noinit, ...gcsafe, tags: [], forbids: [].}
- Knuth's Algorithm D implementation. Source Edit
func overflowingAdd[T: SomeSignedInt](a, b: T): (T, bool) {....raises: [], inline, noinit, ...gcsafe.}
- Source Edit
func overflowingAdd[T: SomeUnsignedInt](a, b: T): (T, bool) {....raises: [], inline, noinit, ...gcsafe.}
- Source Edit
func overflowingSub[T: SomeSignedInt](a, b: T): (T, bool) {....raises: [], inline, noinit, ...gcsafe.}
- Source Edit
func overflowingSub[T: SomeUnsignedInt](a, b: T): (T, bool) {....raises: [], inline, noinit, ...gcsafe.}
- Source Edit
func saturatingAdd[T: SomeSignedInt](a, b: T): T {....raises: [], inline, noinit, ...gcsafe.}
- Source Edit
func saturatingAdd[T: SomeUnsignedInt](a, b: T): T {....raises: [], inline, noinit, ...gcsafe.}
- Source Edit
func saturatingSub[T: SomeSignedInt](a, b: T): T {....raises: [], inline, noinit, ...gcsafe.}
- Source Edit
func saturatingSub[T: SomeUnsignedInt](a, b: T): T {....raises: [], inline, noinit, ...gcsafe.}
- Source Edit
func wideningMul(a, b: int32): (int32, uint32) {....raises: [], inline, noinit, ...gcsafe, tags: [], forbids: [].}
- Source Edit
func wideningMul(a, b: int64): (int64, uint64) {....raises: [], inline, noinit, ...gcsafe, tags: [], forbids: [].}
- Source Edit
func wideningMul(a, b: uint32): (uint32, uint32) {....raises: [], inline, noinit, ...gcsafe, tags: [], forbids: [].}
- Source Edit
func wideningMul(a, b: uint64): (uint64, uint64) {....raises: [], inline, noinit, ...gcsafe, tags: [], forbids: [].}
- Source Edit
func wideningMulAdd(a, b, c, d: uint32): (uint32, uint32) {....raises: [], inline, noinit, ...gcsafe, tags: [], forbids: [].}
- Source Edit
func wideningMulAdd(a, b, c, d: uint64): (uint64, uint64) {....raises: [], inline, noinit, ...gcsafe, tags: [], forbids: [].}
- Source Edit
func wideningMulAdd(a, b, c: uint32): (uint32, uint32) {....raises: [], inline, noinit, ...gcsafe, tags: [], forbids: [].}
- Source Edit
func wideningMulAdd(a, b, c: uint64): (uint64, uint64) {....raises: [], inline, noinit, ...gcsafe, tags: [], forbids: [].}
- Source Edit