在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. 在Swift中相當於Listbox
- 2. 相當於swift中的UIButtonTypeRoundedRect?
- 3. DateTime.FromOADate相當於swift
- 4. Python「或」在Swift中相當於?
- 5. 在Swift中相當於id <type>?
- 6. Firebase Swift相當於push()
- 7. dispatch_barrier_async相當於Swift 3
- 8. Swift instr或strpos相當於
- 9. Swift 3中的「dispatch_apply」相當於什麼?
- 10. 如何在VB.Net中使用與biginteger相當的indexof()?
- 11. iOS/Swift編程相當於Android TableLayout/TableRow
- 12. 在JavaScript中是否有相當於Swift的警戒聲明?
- 13. 什麼是Python Decimal(32)在Swift中相當於?
- 14. CGColorGetComponents在Android中相當於
- 15. 相當於ungetc在java中
- 16. 在Python中相當於JavaBean
- 17. invalidateLayout在iOS8中相當於
- 18. 在R中,相當於upper_bound()
- 19. 在mssql中相當於initcap
- 20. FormCloseQuery在MFC中相當於
- 21. 在JS中相當於RSACryptoServiceProvider
- 22. 在WPF中相當於QStackedLayout
- 23. 在Java中相當於STXXL
- 24. SDO_GEOMETRY在Postgresql中相當於
- 25. 在mysql中相當於pg_query_params?
- 26. 在JAVA中相當於cURL
- 27. 「AS」在sqlite中相當於
- 28. viewWillAppear中相當於在cocos2d
- 29. 在Java中相當於DataTable
- 30. &&相當於在PowerShell中
十進制類型通常用於財務計算,而不只是任意精度。在Java中,您希望BigInteger(正如您的標題所示)不像您的問題主體指示的那樣是BigDecimal。可可不包含任何BigInteger類型。 – bames53 2014-08-27 19:26:29