NumericAnnex
NumericAnnex

NumericAnnex 补充了 Swift 标准库中提供的数值功能。

Build Status codecov

特性

注意:此项目尚处于早期开发阶段,目前尚未准备好用于生产环境。

要求

NumericAnnex 需要 Swift 4.1 (swift-4.1-branch) 或 Swift 4.2 (master)。在 Apple 平台上,它还需要 Security framework 以获得加密安全的随机字节。

安装

在本地克隆或下载 NumericAnnex 后,使用命令 swift build (macOS) 或 swift build -Xcc -D_GNU_SOURCE (Linux) 构建库。 使用命令 swift test (macOS) 或 swift test -Xcc -D_GNU_SOURCE (Linux) 运行测试。 可以使用命令 swift package generate-xcodeproj 生成 Xcode 项目。

要使用 CocoaPods 将包添加为依赖项,请在您的 Podfile 中插入以下行

pod 'NumericAnnex', '~> 0.1.19'

Swift Package Manager 也可以用于将包添加为依赖项。 有关详细信息,请参阅 Swift 文档。

基本用法

import NumericAnnex

print(2 ** 3)
// Prints "8".

print(4.0 ** 5.0)
// Prints "1024.0".

print(Int.cbrt(8))
// Prints "2".

print(Double.cbrt(27.0))
// Prints "3.0".

var x: Ratio = 1 / 4
// Ratio is a type alias for Rational<Int>.

print(x.reciprocal())
// Prints "4".

x *= 8
print(x + x)
// Prints "4".

x = Ratio(Float.phi) // Golden ratio.
print(x)
// Prints "13573053/8388608".

var z: Complex64 = 42 * .i
// Complex64 is a type alias for Complex<Float>.

print(Complex.sqrt(z))
// Prints "4.58258 + 4.58258i".

z = .pi + .i * .log(2 - .sqrt(3))
print(Complex.cos(z).real)
// Prints "-2.0".

文档

所有公共协议、类型和函数都在代码中进行了仔细记录。 有关详细信息,请参阅 格式化的参考文档

该项目遵循 Swift 标准库中发现的许多设计模式。 例如,Math 类型提供诸如 cubeRoot()tangent() 之类的方法,正如 FloatingPoint 类型提供诸如 squareRoot() 之类的方法。

本库中未声明自由函数,除非它们重载 Swift 标准库中现有的函数。 相反,诸如 cbrt(_:)tan(_:) 之类的函数作为静态成员提供。 这避免了与您可能希望使用的 C 标准库函数发生冲突。 当复杂运算的结果与其真实对应项的结果不同时(例如,Complex128.cbrt(-8) != -2),它还有助于在调用点提高清晰度。

未来方向

许可证

所有原创作品均在 MIT 许可证下发布。 有关详细信息,请参阅 LICENSE

复数平方根和基本超越函数的部分使用了从 libc++ 改编的特殊值检查。 libc++ 中的代码在 MIT 和 UIUC/NCSA 双重许可下获得许可。