iphone – 为什么NSDecimalNumber 10 ^ -65平方导致10 ^ 126而不是导致下溢异常?

所以这是代码:

NSDecimalNumber *test=[[NSDecimalNumber alloc] initWithInt:65];
number3=[[NSDecimalNumber one] decimalNumberByDividingBy:[[[NSDecimalNumber alloc] initWithInt:10] decimalNumberByRaisingToPower:test.integerValue]];
number3=[number3 decimalNumberByMultiplyingBy:number3];

我希望程序以下溢异常终止,但事实并非如此.而且,采用NSLog会将number3作为一个巨大的数字.如果我将“test”更改为64以下的任何值,它会给出正确的输出(即10 ^( – 2 * test)).有谁知道这里发生了什么?我的意思是,它很容易解决,但除非我遗漏了某些东西(这很可能),它似乎是NSDecimalNumber类中的一个错误.

最佳答案 这看起来像一个bug.

NSDecimalNumber是documented to support exponents from -128 to +127.显然,(10-65)2的指数为-130,超出范围.但是,不是提出异常,而是将-130包装到126.

NSDecimalNumber的documented default behavior是“这些方法假设您对精度的需求不超过38位有效数字,并且当它们试图除以0或产生一个太大或太小而无法表示的数字时引发异常.”

由于它没有引发异常,我会说你发现了一个错误.您可以在http://bugreport.apple.com/报告.

点赞