[問題] 如何判斷一浮點數 是否為整數(已解決)

看板Programming作者 (藍影)時間14年前 (2011/09/28 00:00), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ [本文轉錄自 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)
文章代碼(AID): #1EWVC1S9 (Programming)
文章代碼(AID): #1EWVC1S9 (Programming)