4

所以这里是代码:

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 类中的错误。

4

1 回答 1

2

这看起来像一个错误。

NSDecimalNumber记录为支持从 -128 到 +127 的指数。显然,(10 -65 ) 2的指数为-130,超出范围。但是,它没有引发异常,而是将 -130 包装到 +126。

记录在案的默认行为NSDecimalNumber“这些方法假定您对精度的需求不超过 38 位有效数字,并在它们尝试除以 0 或产生太大或太小而无法表示的数字时引发异常。”</p>

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

于 2013-01-09T05:58:21.493 回答