我们在做浮点数相等比较的时候,常常使用==,这在常识上来说是完全正确的。但这并非是规范的做法,而且往往导致错误。浮点数是存在一定精度的小数。对于可以精确表示的数用==是可以比较的。但在做等于比较的时候,往往需要把精度考虑在内。
单精度型和双精度型,其类型说明符为float 单精度说明符,double 双精度说明符。在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。
IEEE标准:
float的定义为:指数8位,尾数23位, 还有一位表示正负。
double的定义为:指数11位,尾数52为,还有一位表示正负。
在比较的时候一般定义一个精度EPSINON,然后比较a和b是否相等时,如果(a<(b+EPSINON))&&(a>(b- EPSINON)),就可以认为二者相等。
我们平常使用整数的时候,通常是32位(32位CPU),但有一些需求,如手机号码,可能32位整数无法满足,此时可以使用64位整数。C99扩展了64位整数long long类型。但这可能并非所有的平台都可以支持,此时可以使用ACE来屏蔽此间的差异。使用ACE_INT64和ACE_UINT64都是不错的选择,在Windows和Linux下支持64位整数都没有什么问题。