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/舉報。

相關問題