0

我的二进制值太大。

 value1 : 2 ^ 300,000.
 value2 : 2 ^ 300,000.

我想做value1和value2的“计算”。

首先,如何存储一个value1和value2?(int,float,double ... ???)

 int value1 = 2 ^ 300000;

这个对吗?

这种方式是否完全存储了一个值?

使用上下文)
我有两个包含 300,000 个元素的数组。

eg) array1 @ [@ "apple", @ "banana", @ "iphone", @ "TV", @ "clock" .... <= it has 300, 000.
    array2 @ [@ "fruit", @ "fruit", @ "electric", @ "electric", @ "electric" ....] <= also has 300,000.

显示首选事物到二进制:1,1,0,0,1 ...
显示首选类型到二进制:1,1,0,0,0 ...

计算 array1 和 array2 的“和”的结果:1,1,0,0,0 ...
我喜欢水果的“苹果”和“香蕉”。

使用二进制计算的原因预计比其他方式更快。

4

3 回答 3

2

首先,^运算符不是幂运算符,而是按位 XOR

所以2 ^ 300000实际上产生300002.

其次,根据文档,您可以使用NSDecimalNumber的子类NSNumber

为进行 base-10 算术提供了一个面向对象的包装器。实例可以表示可以表示为尾数 x 10^exponent 的任何数字,其中尾数是最多 38 位长的十进制整数,指数是从 –128 到 127 的整数

于 2013-08-30T11:45:25.700 回答
2

首先,您使用的不是Objective-C 类,而是Plain Old Datatype,即POD。

这个大值远远超过了整数的限制,甚至是 64 位无符号整数。我不是数学天才,所以我不确定这是否适合双精度数,但这没关系,因为使用浮点数会丢失精度。(链接到 WolframAlpha以获得绝对不适合的确切值。)

您想要的可能NSDecimalNumber是提供高达 38 位的精度,这是库中内置的,如果您需要更高的精度,您可以编写自己的类,或查看GMP之类的库。

NSDecimalNumber 这里有一个很好的问答。

更新:正如克雷格在评论中提到的,您可能希望推出自己的课程以加快计算速度。像 GMP 这样的库是通用的,并且会以非常安全的方式进行计算,有时会浪费你的时间,因为你想做的计算可以被简化。

于 2013-08-30T11:43:26.203 回答
0

如果您有 300 000 个对象,您是否考虑过使用数据库,例如 Core Data?而不是一个非常大的位掩码,也许通过单个数据库(核心数据)请求来做同样的事情会更容易。

要回答您的具体问题,整数的 C 数组可能是最好的解决方案:

const NUM_OBJECTS = 300000;
//8 * sizeof(int) bits per an int
int* mask = malloc((size_t) ceilf(NUM_OBJECTS / (sizeof(int) * 8.0f));
于 2013-08-30T13:21:07.370 回答