在apple Swift中使用大量数字

在apple Swift中使用大量数字,swift,numbers,Swift,Numbers,我不是程序员,我只是喜欢在空闲时间写一些代码!我以前用python3编程,现在我正在学习苹果的Swift。我的问题是: 在python3中,我使用了非常大的数字,比如10**1000,我可以打印它们,用它们进行数学运算,等等。在Swift中,我不能这样做,因为从10**300或10**400开始,Double和Float类型都会给出“+无穷大”,所以我不能打印它,也不能对它进行任何操作 我怎样才能解决这个问题?(注:如果有人感兴趣,我正在尝试解决一些ProjectEuler的问题!)提前谢谢你,

我不是程序员,我只是喜欢在空闲时间写一些代码!我以前用python3编程,现在我正在学习苹果的Swift。我的问题是:

在python3中,我使用了非常大的数字,比如10**1000,我可以打印它们,用它们进行数学运算,等等。在Swift中,我不能这样做,因为从10**300或10**400开始,Double和Float类型都会给出“+无穷大”,所以我不能打印它,也不能对它进行任何操作

我怎样才能解决这个问题?(注:如果有人感兴趣,我正在尝试解决一些ProjectEuler的问题!)提前谢谢你,对于我可能犯的任何错误,我很抱歉,我不是英国人,这是我第一次使用StackOverflow

如果您知道(或愿意学习)如何实现一个大数字,请在swift中定义您自己的类型(可能是一个结构),然后实现算术运算符+,-等的重载,以及处理这些大数字所需的任何其他内容

C++中有一个实现,但是如果你稍微谷歌,你可能会发现其他算法,你可以翻译成SWIFT代码,或者其他语言的例子(如果你不熟悉C++)

银行代码。 Swift已经定义了两种名为
Float80
Float96
的“扩展”浮点类型:

Float80 80 bit MacOS float: 1 sign bit, 15 exponent bits, 1 integer bit, 63 fraction bits
Float96 96 bit 68881 float: 1 sign bit, 15 exponent bits, 16 pad bits, 1 integer bit, 63 fraction bits
但显然没有定义运算符重载-它们只是“隔离”结构。

如果您知道(或愿意学习)如何实现一个大数字,请在swift中定义您自己的类型(大概是一个结构),然后实现算术运算符+,-等的重载,以及处理这些大数字所需的任何其他内容

C++中有一个实现,但是如果你稍微谷歌,你可能会发现其他算法,你可以翻译成SWIFT代码,或者其他语言的例子(如果你不熟悉C++)

银行代码。 Swift已经定义了两种名为
Float80
Float96
的“扩展”浮点类型:

Float80 80 bit MacOS float: 1 sign bit, 15 exponent bits, 1 integer bit, 63 fraction bits
Float96 96 bit 68881 float: 1 sign bit, 15 exponent bits, 16 pad bits, 1 integer bit, 63 fraction bits

但显然没有定义运算符重载-它们只是“隔离”结构。

我正在开发一个BigNumber库,您可以使用它进行一些大数计算。实际上,该库基于GNU多精度(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

我希望这个库(请参阅:)可能对您有用。

我正在开发一个BigNumber库,您可以使用它进行一些大数值计算。实际上,该库基于GNU多精度(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

我希望图书馆(见:)对您有用。

谢谢您的回答!!这真的很奇怪,我甚至不认为自己有必要实现它,我认为有一个内置的方式来做这件事,只是因为一个不太复杂的语言(如Python可以)没有问题。如果我写
类型(10**1000)
它会返回int作为结果。。。也许这不是一个需要解决的初学者问题…:(不要忘记Swift仍然在beta版本中,所以它仍然有可能在1版本中得到更好的支持。同时,如果你喜欢,你可以编一个雷达。谢谢你的回答!这真的很奇怪,我甚至不认为有必要自己来实现它,我认为有一个内在的方法来做到这一点,JUS。t因为一种不太复杂的语言(就像python一样)可以毫无问题地完成它。如果我写
type(10**1000)
它会返回int作为结果…也许这不是一种需要解决的初学者问题…:(别忘了swift仍处于测试阶段,因此它在1.0版中仍有可能获得更好的支持。与此同时,如果你愿意,你可以申请雷达。