2012-12-09 63 views
2

我在做UVa上的problem。問題陳述如下:爲什麼Double數據類型在這裏工作

我們必須找到一個數p的n次根,並且存在一個整數K,使得K^N = P。所以基本上我們必須找到整數k。

限制條件:

p < 10^101,正< 200,K < 10^9。 所有變量都是整數並且是正數。

交流解決方案在C簡單地計算問題,

pow(p,1/n); 

我知道雙能容納高達數據E308,但據我所知高達15個精確到小數點後。

所以我的問題是,爲什麼上述工程的解決方案,不能有任何精度誤差?

回答

3

數10^101看起來很大。如果n是2,則不能在任何地方存儲k。

,但如果你看看其他的限制 - k被限制在10^9。這需要30位無符號類型。雙倍的尾數可以很容易地證明這一點。

+0

但可以準確存儲? –

+0

沒有。你對p的精度不夠了。但是當你把它縮小到k <10^9時,這是無關緊要的。 – stefan

+0

好吧,我正在接近某個地方,但是現在你能否詳細說明爲什麼當我們縮小到10^9時,p的精度並不重要。 –

0

提示:有多少小數由問題語句所需?

+0

沒有小數位,只是整數,但是當我們輸入p作爲雙精度時,可以完全雙精度地存儲它嗎?因爲如果p有10^100個數字,它不能準確地存儲它(我猜)。 –

+0

@AkashdeepSaluja你甚至會解析10^100個數字? – irrelephant

+0

@AkashdeepSaluja:你需要準確地存儲它嗎? –

相關問題