[問題] 如何判斷一浮點數 是否為整數(已解決)
※ [本文轉錄自 C_and_CPP 看板 #1EWVBeUp ]
作者: tropical72 (藍影) 看板: C_and_CPP
標題: [問題] no math.h, 如何判斷一浮點數 是否為整數
時間: Tue Sep 27 23:59:32 2011
原問題是,在不調用 math.h 下,如何判斷一個浮點數是不是整數?
類似的問題還有 ceil、floor、rounding ( return (int)(x+0.5); )
以 ceil 為例,考慮正負號、完善些的的可能長得像這樣
double ceil(double x)
{
if( x==(int)x) return (int)x;
else if(x > 0.0) return (int)(x+1);
else return (int)(x);
}
而在不調用 math.h 下,判斷一個浮點數是否為整數,寫起來可能像這樣
int IsInteger(double x)
{
return (int)(x)==x;
}
上面這些是在看 blog 時,大多人面試給的答案,但我認為不算正確
( 當然我不是面試官,我不知道他們是怎麼評量這些答案的 )
用 cast 達到 ceil、floor、rounding、判斷整數還蠻常見的,
但我認為錯誤的關鍵是在於這種寫法完全乎視了 casting 所帶來之影響,
換句話說,上述任一函式,將 x 以 12345678901234567890.12 傳入,
這在 casting 時必會發生 error,造成不可預期之錯誤。
問題來了,我也不知道真正標準的,「判斷整數」、「模擬 ceil」,該如何做,
初步是有想過以 IEEE754 64bits 方式下去分析,但卻又一直想不透,
不知各位版友對於此問是否有其他想法?
謝謝各位不吝解惑。
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.78.41
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.78.41
※ 編輯: tropical72 來自: 180.177.78.41 (09/28 00:38)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章