2012-01-22 35 views
-2

我試圖把兩個數字,並讓他們的平方。使用幾個數字一些工作,但這一個給我的問題pow(.0305,2)。使用計算器我得到了一個答案:0.093025;但是當我使用java時,我得到了一個答案:9.609999999999999E-4。我需要.0305因爲我正在3.05/100這是.0305。不準確java.pow()導致

我已經通過試驗發現,如果我做.pow(.305,2),那不給我我需要的答案,但後來我就一定得與3.05/100。

編輯:(添加代碼)

double weight=3.05; 
double TapeLength=100.00; 
double ftwt= weight/TapeLength; this gives me: 0.093025 
double ftwt= Math.pow(ftwt,2); //this gives me: 9.3025E-4 

一切澆鑄成雙。

+2

http://floating-point-gui.de/ –

+0

請出示演示該問題的一些示例代碼。 –

+1

.0305對2的冪不是0.093025,所以我不相信你在計算器上得到了這個結果。 –

回答

4

如果你是真的得到9.609999999999999E-4作爲結果,你做錯了什麼,而不是你有什麼問題。下面的代碼(在Eclipse 3.7.1):

class Test { 
    public static void main(String args[]) { 
     double dd = .0305; 
     System.out.println (Math.pow(dd, 2)); 
     System.out.println ("%.8f\n", Math.pow(dd, 2)); 
    } 
} 

生產:

9.3025E-4 
0.00093025 

它們既正確的(a),在不同的輸出格式只是表示。在這種情況下,double的默認值是指數格式,但最後一行顯示如何獲得不同的格式。


(一)剛上起飛的機會,你通過指數形式混淆(根據您的意見),0.00093025一樣9.3025E-4因爲後者的手段9.3025 x 10-49.3025與小數點向四個位置的左邊。

0

除了與數量級的問題,我認爲這只是一個鍵入錯誤,如果您關注的是,你得到0.00096xxxxx你應該將它們指定爲從開始的兩倍。你讓他們浮動,這意味着你失去了精確度,只有他們投了一倍。然後通過對它們進行平方來彌補錯誤。

使他們加倍可能會有所幫助,但你要記住,當你在處理十進制有理數的二進制表示可能沒有用有限位數的確切表示。

+0

在float中做這個計算不應該給你9.6xxx。 –

+0

我懶得鍵入尾數。固定。我只是相信原來的海報,他得到了一個錯誤的有效數字爲指數 – Luis

+0

它不應該給你0.00096xxx。它應該給你0.00093025。 –

0

使用Math.pow(x, 2)是多少,比使用x * x那是因爲它是一樣的慢很多是Math.exp(Math.log(x) * n)由於它更計算中往往有較大的舍入誤差。(所以我TS一個壞主意,全面恕我直言)