簡體   English   中英

說明雙值的“累積舍入誤差”

[英]Explain “accumulated round-off error” for double values

我是Java的自學成才的初學者,在同一等式中使用時難以理解整數和雙精度

例如,

int x;
double x;
i = 5;

x = i / 2 + 1.0; // (answer 3.0)

z = (int) 1.0 + i / 2.0; // (answer 3.5)

四舍五入是什么?

問題是該操作:

i / 2

...正在執行整數除法。 這就是為什么5 / 2給出的結果是2 ,而不是2.5 這是Java中的正常行為,要執行浮點除法,必須確保至少一個操作數是浮點文字:

5 / 2.0

現在,上面的代碼將按預期返回2.5 或者,您可以強制轉換其中一個操作數:

((double) i) / 2

包含兩個整數的除法將得出一個整數(因此5/2 = 2)。 如果在其中一個操作數中使用double,則將產生double(因此5 / 2.0 = 2.5)。 其余的是操作優先級。

i / 2 = int 2因為兩個操作數都是整數,所以使用整數除法運算(產生整數結果)

i / 2.0 = double 2.5因為我首先被強制為double(另一個操作數的類型),並且使用了double除法

這是整數和十進制除法之間的情況。

當兩個整數相除時,將執行整數除法,即,將數字相除,並舍去小數部分。

當所討論的兩個數字中的任意一個數字為小數(雙精度/浮點數)時,其他所有數字都將被視為小數,從而使表達式為5 / 2.0。 無論對象2.0是哪種類型,結果都將返回2.5(默認情況下為double)。

給定混合方程式(例如5/2 + 1.0),運算符優先級定義了表達式的計算方式。 由於除法的優先級高於加法,因此5/2被評估為整數除法,返回2為整數。

然后將其添加到1.0,其中2在評估之前提升為雙精度,返回數字3.0作為最終結果的雙精度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM