用書學習C。在我的書中,類似的代碼應該產生“3.000000”作為截斷錯誤。這本書有點舊,仍然是 C99 標準。我錯過了什么?
#include <stdio.h>
int main()
{
int i;
float f;
scanf("%d", &i); // 123456789
f = i; // implicit type cast
printf("int: %d with size %d\n", i, sizeof(i)); // int: 123456789 with size 4
printf("float: %f with size %d\n", f, sizeof(f)); // float: 123456792.000000 with size 4
printf("error: %f with size %d\n", f-i, sizeof(f-i)); // error 0.000000 with size 4
return 0;
}
uj5u.com熱心網友回復:
我認為0.000000
是正確的。C99 6.3.1.8p1 說:
否則,如果任一運算元的對應實數型別為浮點數,則將另一個運算元轉換為對應實數型別為浮點數的型別,而不改變型別域。
所以在 中f-i
,i
被轉換為float
,產生與 相同的值f
。我不確定您的書的編譯器如何獲得3.000000
.
如果您真的想查看截斷錯誤,請執行(double)f - i
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/468812.html
上一篇:如何根據第一個和最后一個嵌套陣列mongo中的值過濾包含具有3級嵌套陣列的檔案的集合中的資料
下一篇:簡單快速排序程式中的分段錯誤