在目标c中使用长数字的pow操作

use*_*253 1 math objective-c ios

我试图使操作pow(49999994,13),结果1.220701e + 100.但是当我在客观ci做的时候得到了结果-9223372036854775808.如何正确地在Objective-C中执行此操作?

Jan*_*ano 5

Objective-C中没有pow运算符,因此使用C或NSDecimalNumber(首选).

POW

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

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

NSDecimalNumber

正如Martin R所说,在Objective-C中使用它的正确方法是NSDecimalNumber,产生尽可能多的准确数字,然后是零.

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

比较结果:

 accurate 12207012207044960931467189309843359073812548192494216675520514965298161665721254575494908505339305984
nsdecimal 12207012207044960931467189309843359073800000000000000000000000000000000000000000000000000000000000000
      pow 12207012207044960421719677106210881027530912788496417091073101786581413645039745611250537465292783616.000000
Run Code Online (Sandbox Code Playgroud)

  • *"Objective-C中没有pow运算符"* - 在某种意义上,有:`decimalNumberByRaisingToPower`. (2认同)