作者tropical72 (蓝影)
看板Programming
标题[问题] 如何判断一浮点数 是否为整数(已解决)
时间Tue Sep 27 23:59:59 2011
※ [本文转录自 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)