可能重複:
Which is the first integer that an IEEE 754 float is incapable of representing exactly?尋找不能被表示爲IEEE-754的32位浮點數的最小整數
首先,這是一個家庭作業的問題,只是爲了清除該立即開始。我當然不是在尋找一個勺子餵食的解決方案,只是一個指向正確方向的小指針。
所以,我的任務是找到不能表示爲IEEE-754浮點(32位)的最小正整數。我知道,測試對類似「5 == 5.00000000001」將失敗平等的,所以我想我會簡單地在所有的數字環路和測試,在這個時尚:
int main(int argc, char **argv)
{
unsigned int i; /* Loop counter. No need to inizialize here. */
/* Header output */
printf("IEEE floating point rounding failure detection\n\n");
/* Main program processing */
/* Loop over every integer number */
for (i = 0;; ++i)
{
float result = (float)i;
/* TODO: Break condition for integer wrapping */
/* Test integer representation against the IEEE-754 representation */
if (result != i)
break; /* Break the loop here */
}
/* Result output */
printf("The smallest integer that can not be precisely represented as IEEE-754"
" is:\n\t%d", i);
return 0;
}
這種失敗。然後我試圖從浮點「結果」中減去整數「i」,即「我」,希望能夠實現某種「0.000000002」,我可以嘗試並檢測到,也失敗了。
有人可以指出我可以依賴的浮點屬性來獲得所需的中斷條件嗎?
-------------------- Update below ---------------
感謝您對此的幫助一!我在這裏學到許多東西:
我最初的想法是確實是正確的,並確定它的目的是要在(Solaris 10中,32位)的計算機上運行的結果,但沒能在我的Linux系統上工作( 64位和32位)。
漢斯帕桑特加入製作的節目也與我的系統上運行的變化,似乎有一些平臺的差異會在這裏,我沒有想到,
謝謝大家!
它如何失敗?當我編譯並執行你的代碼時,輸出是16777217. – Henrik 2010-10-08 11:51:54
@KennyTM:該死,我以爲我擅長搜索!對不起,然後複製。 – LukeN 2010-10-08 11:53:03
@Henrik:它只是保持回捲(INT_MAX - > 0),並且沒有結果。 – LukeN 2010-10-08 11:54:15