1. 首页

Swift Numerics 开源库:让 Swift 更适合数值计算

苹果的工程师 Steve Cannon 说, Swift Numerics 是一个新的 Swift 开源库,它试图填补 Swift 标准库(Standard Library)的空白。目前,它包含两个模块,分别用于实数和复杂的数学计算,但是在它的路线图上有更多的内容

按照目前的决策,Swift Numerics 依然保持在其自身的包中,而不是位于标准库中,这主要是因为编译器的一些限制,这些限制阻碍了新 API 的实现,因为实现的方式必须要满足 Swift 对跨语言版本源代码稳定性的承诺。尽管如此,并不排除 Swift Numerics 将来可能会转移到标准库的可能性。无需多言,只有那些足够通用的特性才能考虑加入到标准库之中。

Swift Numerics 是一个模块化的库,这意味着我们可以只导入所需的模块。例如,如下展现了如何只导入Complex模块:

复制代码


import Complex

另外,我们还可以按照这些写法导入整个 Numerics API:

复制代码


import Numerics

Real模块定义了三个协议:ElementaryFunctionsRealFunctionsReal,Cannon 说,最后一个是其中最重要的。

Real描述了一个浮点类型,它提供了完整的数字函数集,比如explogcospow等等。其强大之处在于,借助它,我们可以编写通用的代码,这些代码能够无缝地集成到 Swift 未来会添加的新浮点类型中,比如Float16Float128。上文提到的另外两个协议用于分区(partition)函数,它们可以很容易地扩展至比实数更通用的数字字段,或者扩展至非实数字段。后者包括像exp2exp10gammalogGamma等众多的函数。

Complex数字构建在Real之上:

复制代码


public struct Complex<RealType> where RealType: Real { ...}

借助简单直接的语法,我们可以针对复杂数字进行基本的计算操作:

复制代码

 import Complex
 // 声明一个复杂数字:let z: Complex<Double> = 2 + 3 * .iprint(z)
 // (2.0, 3.0)print(z.real)
 // 2.0print(z.imaginary)
 // 3.0let w = Complex<Double>(1, -2.5)let zz = z + zzlet p = z * Complex(0, 2.5)

据 Cannon 所言,与 C 代码相比,Swift Numerics 提供了更好的性能。这主要是由于对 0 和 NaN 的处理进行了简化。虽然 C(和 c++)倾向于区分不同类型的 0 和 NaNs,但是 Swift Numerics 倾向于丢失一些信息来简化代码,这减少了程序员保持安全性和正确性的开销,并带来了显著的速度优化。

最后值得一提的是,Swift Numerics 依然处于活跃的开发之中,未来会加入更多的类型,包括 Float16( https://github.com/apple/swift-numerics/issues/8 )、超过 64 位的固定宽度的整数、表示多维同构数据的 ShapedArray 协议等。

原文链接

Swift Numerics Aims to Make Swift Suitable for Numerical Computing

作者:Sergio De Simone
链接:https://www.infoq.cn/article/y0Tu8tbbwko09TY68xjh

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:Swift Numerics 开源库:让 Swift 更适合数值计算

链接:https://www.javascriptc.com/3145.html

« 微服务治理实践:探寻业务的单点异常自愈能力
巧用 CSS 实现酷炫的充电动画»
Flutter 中文教程资源

相关推荐

QR code