在Swift中是否有与Java的BigInteger类相当的功能?我正试图在Swift中进行大于UInt64最大数量的正整数计算。处理这些数字的最佳方法是什么?BigInteger在Swift中相当于?
回答
您可以使用Cocoa的NSDecimalNumber
类。它不是无限的精确度,但它可以表示38位十进制数字的精度,这可能足以满足您的需求。
这是不同的精度'双'? – nhgrif 2016-04-09 18:38:03
float32大约有sd 7,float 64 sd 16,float80 sd34 – 2016-11-18 22:05:50
我写了一个库,允许你在Swift中使用大整数。类似于Java的BigInteger。还有操作员过载使工作更方便。 例子:
let a = BigInteger("111111111111111111111111111111111111111111111110000000001")!
let b = 999_999_999
let c = a + b // 111111111111111111111111111111111111111111111111000000000
这对于arm64的iOS也适用吗?还有任何关于如何将这个包含在某个地方列出的iOS项目中的步骤? – 2015-01-13 10:24:42
是的,它适用于arm64。这里有一个关于如何添加框架依赖性的好指南https://github.com/stephencelis/SQLite.swift#installation。您可以使用BigInteger的本指南。 – Kirsteins 2015-01-13 10:51:35
谢谢,我试着按照你建议的步骤操作,但是我添加它后无法在代码中导入它。你可以录制视频或列出截图的步骤? – 2015-01-13 17:12:35
我工作,也对BigNumber库,你可以做一些大的运算量。实际上,该库基于GNU Multiple Precision(GMP)库,并且我编写了一个Objective-C/Swift包装器。 目前大整数数学,包括大量的操作符重载,是可能的。 一个代码示例是这样:
var err : NSError?
var bi1 = BigInt(nr: 12468642135797531)
var bi2 = BigInt(nr: "12345678901011121314151617181920", error: &err)
var res = bi1 * bi2
println("Multiply 2 BigInts: bi1 * bi2 = \(res.toString())")
导致:
Multiply 2 BigInts: bi1 * bi2 = 153933852140173822960829726365674325601913839520
你可以找到在图书馆:https://github.com/githotto/osxgmp
它可以在应用程序中用于提交到Appstore吗?我想这是不能由于许可限制。 – Kirsteins 2015-01-12 11:17:44
我不是GNU和AppStore许可证/限制的专家,但恕我直言,只要你保持包含的引用完好无损,这样原作者就可以被识别出来,这应该不成问题。顺便说一句,我很高兴听到图书馆对你有用!也许你可以与我们分享它的用途是什么?! – 2015-01-13 22:02:07
我已经写了迅速的一个大整数和大双的实施,这不需要任何额外的库。只需将其复制到您的项目中。它支持大多数常用数学运算符(如加法,减法,乘法,取幂,模数和除法)的整数(BInt)和分数(BDouble)。一些优化的数学函数,如阶乘或gcd也被实现。
下面是一些代码示例:
// Create a new number:
let num = BInt(232)
print(num) // prints "232"
// You can also use Strings to create a number:
let veryBig = BInt("-827846184963421874362418746238453267452971345218746328715380000000000")
// Every standard math operator works well, even with normal Integers
// Visit the github page for more informations
let v0 = (BInt(5) + BInt(4)) - BInt(3)
let v1 = veryBig * 1000
let v2 = vergBig^num
let v3 = (veryBig^50000)/(BInt(2)^900) + 1
let v4 = gcd(abs(veryBig), num)
// BDouble is very similar, you can find a detailed description on Github
let fraction = BDouble("27", over: "31")
print(fraction) // prints "27/31"
您可以自由使用它没有给我的信用,如果你想请贡献。
干得好!谢谢。 – 2017-07-04 13:19:16
它可以将Data(NSData)转换为BigInt吗? – 2017-10-04 08:41:38
这。
https://github.com/dankogai/swift-pons
其实BigInt有只是它的一部分。除了BIGINT你:
- 通用理性是需要形成INT8为bigint的分子和分母
- 一般复杂,或者取整数(高斯整数)或实数类型不仅double和float,但也合理。
- 纯粹快捷。不仅运行在OS X,iOS和tvOS上,还运行在Linux上。在游乐场愉快地工作。
但最重要的是,它是协议为本这样可以延长,比如全整数
import PONS
func fib<T:POInteger>(n:T)->T { // with a little better algorithm
if n < T(2) { return n }
var (a, b) = (T(0), T(1))
for _ in 2...n {
(a, b) = (b, a+b)
}
return b
}
let F11 = fib(11 as Int8)
let F13 = fib(13 as UInt8)
let F23 = fib(23 as Int16)
let F24 = fib(24 as UInt16)
let F46 = fib(46 as Int32)
let F47 = fib(47 as UInt32)
let F92 = fib(92 as Int64)
let F93 = fib(93 as UInt64)
let F666 = fib(666 as BigInt)
丹数发生器
它可以将Data(NSData)转换为BigInt吗? – 2017-10-04 08:35:13
我发现了一个原型BigInt有在官方斯威夫特repository:
您可能可以将其复制到您的项目中并使用它。也许有一天它会被添加到标准库中。
- 1. C#的BigInteger相当于在Java中
- 2. 在Swift中相当于Listbox
- 3. 相当于swift中的UIButtonTypeRoundedRect?
- 4. DateTime.FromOADate相当于swift
- 5. swift相当于arrayWIthObjects?
- 6. 在Swift中相当于id <type>?
- 7. Python“或”在Swift中相当于?
- 8. dispatch_barrier_async相当于Swift 3
- 9. Firebase Swift相当于push()
- 10. Swift instr或strpos相当于
- 11. Android中的iOS服务相当于Swift
- 12. Swift中的自动类alloc相当于
- 13. Swift 3中的“dispatch_apply”相当于什么?
- 14. iOS/Swift编程相当于Android TableLayout/TableRow
- 15. Objective-C的吸气剂SWIFT相当于
- 16. Swift是否具有相当于pdb.set_trace()
- 17. Swift:添加BigInteger框架
- 18. 如何在VB.Net中使用与biginteger相当的indexof()?
- 19. 在JavaScript中是否有相当于Swift的警戒声明?
- 20. 什么是Python Decimal(32)在Swift中相当于?
- 21. 关于Java BigInteger
- 22. CGColorGetComponents在Android中相当于
- 23. 在JS中相当于RSACryptoServiceProvider
- 24. 在mssql中相当于initcap
- 25. 在CUDA中相当于scipy.interpolate.griddata
- 26. 相当于在PowerShell中
- 27. 在WPF中相当于QStackedLayout
- 28. invalidateLayout在iOS8中相当于
- 29. 在Qt中相当于dumpbin
- 30. 在PowerShell中相当于su
十进制类型通常用于财务计算,而不只是任意精度。在Java中,您希望BigInteger(正如您的标题所示)不像您的问题主体指示的那样是BigDecimal。可可不包含任何BigInteger类型。 – bames53 2014-08-27 19:26:29