簡體   English   中英

浮點舍入誤差

[英]floating point rounding errors

輸出是

x=1000300  y=1000000,  z=1000300

我能理解我如何得到x和z,但是c的 y的輸出沒有意義。

 #include <stdio.h> 
 int main() 
 { int i=0; 
  float a = 100; 
  a = a*a*a*a*a;  

 float c = 3; 
 float x = 1000000*c + a; 
 float y = a; 
 float z = 0; 

  for (i=0; i<1000000; i++) 
  { y += c; 
    z += c; 
  } 

  z += a; 
  x /= 10000; 
  y /= 10000; 
  z /= 10000; 

 printf("x=%.0f  y=%.0f,  z=%.0f\n", x, y, z); 
 }

y的值從1E10開始(從賦值到a )。 您將3與此相加一百萬次。

問題是float最多具有7個有效十進制數字,因此您實際上每次都不會更改y ,因此結果除以10,000就是顯示的10,000,000 1,000,000。

如果使用double編碼,則會看到幾乎更多的預期結果。

暫無
暫無

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

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