我在做UVa上的problem。問題陳述如下:爲什麼Double數據類型在這裏工作
我們必須找到一個數p的n次根,並且存在一個整數K,使得K^N = P。所以基本上我們必須找到整數k。
限制條件:
p < 10^101,正< 200,K < 10^9。 所有變量都是整數並且是正數。
交流解決方案在C簡單地計算問題,
pow(p,1/n);
我知道雙能容納高達數據E308,但據我所知高達15個精確到小數點後。
所以我的問題是,爲什麼上述工程的解決方案,不能有任何精度誤差?
我在做UVa上的problem。問題陳述如下:爲什麼Double數據類型在這裏工作
我們必須找到一個數p的n次根,並且存在一個整數K,使得K^N = P。所以基本上我們必須找到整數k。
限制條件:
p < 10^101,正< 200,K < 10^9。 所有變量都是整數並且是正數。
交流解決方案在C簡單地計算問題,
pow(p,1/n);
我知道雙能容納高達數據E308,但據我所知高達15個精確到小數點後。
所以我的問題是,爲什麼上述工程的解決方案,不能有任何精度誤差?
數10^101看起來很大。如果n是2,則不能在任何地方存儲k。
,但如果你看看其他的限制 - k被限制在10^9。這需要30位無符號類型。雙倍的尾數可以很容易地證明這一點。
提示:有多少小數由問題語句所需?
沒有小數位,只是整數,但是當我們輸入p作爲雙精度時,可以完全雙精度地存儲它嗎?因爲如果p有10^100個數字,它不能準確地存儲它(我猜)。 –
@AkashdeepSaluja你甚至會解析10^100個數字? – irrelephant
@AkashdeepSaluja:你需要準確地存儲它嗎? –
但可以準確存儲? –
沒有。你對p的精度不夠了。但是當你把它縮小到k <10^9時,這是無關緊要的。 – stefan
好吧,我正在接近某個地方,但是現在你能否詳細說明爲什麼當我們縮小到10^9時,p的精度並不重要。 –