模运算和位运算
.package(url: "https://github.com/DavidSkrundz/Math.git", .upToNextMinor(from: "1.4.0"))
声明了 FixedWidthInteger
自带的四个 random()
函数
声明了模运算操作
func modulo(_ modulo: Self) -> Self
func adding(_ other: Self, modulo: Self) -> Self
func subtracting(_ other: Self, modulo: Self) -> Self
func multiplying(_ other: Self, modulo: Self) -> Self
func exponentiating(by exponent: Self, modulo: Self) -> Self
func inverse(modulo: Self) -> Self?
func gcdDecomposition(_ other: Self) -> (gcd: Self, selfCount: Self, otherCount: Self)
FloatingPoint
和 BinaryInteger
定义了 modulo
BinaryInteger where Self: ModularOperations
定义了 exponentiating
(求幂) 和 inverse
(求逆)
FixedWidthInteger
实现了剩余的函数
Int
, Int8
, Int16
, Int32
, Int64
, UInt
, UInt8
, UInt16
, UInt32
, 和 UInt64
都遵循 ModularOperations
协议
位旋转
static func >>> <RHS: BinaryInteger>(lhs: Self, rhs: RHS) -> Self
static func <<< <RHS: BinaryInteger>(lhs: Self, rhs: RHS) -> Self
平方根
func sqrt() -> Self
字节转换
var littleEndianBytes: [UInt8]
var bigEndianBytes: [UInt8]
字符串转换
var hexString: String
位打包/解包
func asBigEndian<T: BinaryInteger>(sourceBits: Int = MemoryLayout<Element>.size * 8, resultBits: Int = MemoryLayout<T>.size * 8) -> [T]
func asLittleEndian<T: BinaryInteger>(sourceBits: Int = MemoryLayout<Element>.size * 8, resultBits: Int = MemoryLayout<T>.size * 8) -> [T]
一个用于定义自定义有限域的协议。它实现了 Numeric
, Strideable
, 和 LosslessStringConvertible
定义一个新的 FiniteFieldInteger
struct F_31: FiniteFieldInteger {
static var Order = UInt8(31) // Must be prime
var value: Element = 0
}
已实现的功能
init()
init(_ value: Element)
init(integerLiteral value: Element)
init?(_ description: String)
init?<T>(exactly source: T) where T: BinaryInteger
var description: String
func distance(to other: Self) -> Int
func advanced(by n: Int) -> Self
static func == (lhs: Self, rhs: Self) -> Bool
static func < (lhs: Self, rhs: Self) -> Bool
static func ... (minimum: Self, maximum: Self) -> ClosedRange<Self>
static func + (lhs: Self, rhs: Self) -> Self
static func - (lhs: Self, rhs: Self) -> Self
static func * (lhs: Self, rhs: Self) -> Self
static func / (lhs: Self, rhs: Self) -> Self
static func % (lhs: Self, rhs: Self) -> Self
func exponentiating(by value: Element) -> Self
static func += (lhs: inout Self, rhs: Self)
static func -= (lhs: inout Self, rhs: Self)
static func *= (lhs: inout Self, rhs: Self)
static func /= (lhs: inout Self, rhs: Self)
static func %= (lhs: inout Self, rhs: Self)
一种任意精度无符号整数类型。它遵循 UnsignedInteger
和 ModularOperations
, 并且提供 func power<T: BinaryInteger>(of exponent: T) -> BigUInt
(计算幂的函数)
BigUInt
的 gcdDecomposition()
只返回有效的 gcd
(最大公约数)。 selfCount
和 otherCount
的值没有意义 (并且总是零)
目前没有 BigInt
的实现,所以 Strideable
的一致性来自标准库,这意味着调用 distance(to other: BigUInt)
或 advanced(by n: BigInt)
是不安全的,除非差值在 Int
的范围内