1

我正在尝试进行操作 pow(49999994,13),结果为 1.220701e+100。但是当我在目标中做时,得到了结果-9223372036854775808。如何在 Objective-C 中正确执行此操作?

4

2 回答 2

5

Objective-C 中没有 pow 运算符,所以使用 C 或 NSDecimalNumber(首选)。

战俘

NSLog(@"%f",(double)pow(49999994,13));        // OK 12207012207044960421719...
NSLog(@"%f",(long long int)pow(49999994,13)); // WRONG -9223372036854775808

-92233...使用 along long int而不是 a 的结果double

NSDecimalNumber

正如 Martin R 所指出的,在 Objective-C 中执行此操作的正确方法是NSDecimalNumber,它产生尽可能多的准确数字,后跟零。

    NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"49999994e0"];
    n = [n decimalNumberByRaisingToPower:13];
    NSLog(@"nsdecimal %@",n);

比较结果:

 accurate 12207012207044960931467189309843359073812548192494216675520514965298161665721254575494908505339305984
nsdecimal 12207012207044960931467189309843359073800000000000000000000000000000000000000000000000000000000000000
      pow 12207012207044960421719677106210881027530912788496417091073101786581413645039745611250537465292783616.000000
于 2013-04-03T08:22:21.953 回答
0

如果你看到 pow() 的方法声明,它是这样的:

double pow(double, double);

并且您将结果保存到long int或使用整数说明符打印,导致超过long int.

您可以将其用作:

 double result=pow(49999994,13);
于 2013-04-03T08:32:22.650 回答