[英]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.