4

因此,这里的代码:为什么10^-65平方的NSDecimalNumber会导致10^126而不是导致下溢异常?

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

我所期望的程序与溢异常终止,但事实并非如此。而且,拿一个NSLog给出的数字是一些很大的数字。如果我将“测试”更改为64以下的任何值,它会给出正确的输出(即10 ^( - 2 *测试))。有人知道这里发生了什么吗?我的意思是,这很容易解决,但除非我错过了某些东西(这很可能),这似乎是NSDecimalNumber类中的一个错误。

回答

2

这看起来像一个错误。

NSDecimalNumberdocumented to support exponents from -128 to +127。显然,(10 -65)的指数为-130,超出范围。然而,它不是抛出异常,而是在-130到+126之间。

NSDecimalNumberdocumented default behavior是,“该方法假设您需要的精度不超过38个显著数字,引发异常,当他们尝试除以0或者产生一些过大或过小而无法表示。”

既然它没有引发异常,我会说你发现了一个错误。你可以在http://bugreport.apple.com/举报。

相关问题