unsigned int 0~4294967295
int 2147483648~2147483647
unsigned long 0~4294967295
long 2147483648~2147483647
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
类型 比特数 有效数字 数值范围
float 32 6-7 -3.4*10(-38)~3.4*10(38)
double 64 15-16 -1.7*10(-308)~1.7*10(308)
long double 128 18-19 -1.2*10(-4932)~1.2*10(4932
浮点数的比较运算是很不安全的。由于任何浮点数运算都是不精确的,绝对不要比较两个浮点数看它们是否相等。使用二进制浮点数格式,产生数学意义上同样结果的不同运算所产生的结果值可能会在最低有效位上有所不同。例如:1.31e0 + 1.69e0应该得到3.00e0,同样,1.50e0 + 1.50e0也应该得到3.00e0。但是,如果你比较(1.31e0 + 1.69e0)与(1.50e0 + 1.50e0),你可能会发现它们的和并不相等。判断两个数相等在且仅在两个操作数的所有位相同的情况下才会得到肯定的答案。由于两个看起来等效的浮点运算不是必定会产生完全相等的结果,直接做是否相等的比较可能会产生错误的结果,即使数学上这种比较是完全正确的。
比较浮点数是否相等的标准方法是首先确定在比较中允许的误差,然后看一个数是否在另一个数的此误差范围内,可以采用如下方式:
if ( ( value1 >= ( value2 - error ) ) && ( value1 <= ( value2 + error ) ) ) {},而更高级的方法如下:
if ( abs( value1 - value2 ) <= error ) {}
挑选误差值的时候一定要小心,它一定要比计算中所会出现的最大误差要大一点点。具体的值取决于特定的浮点数格式以及比较数的数量级,最后一个规则是:在比较两个浮点数是否相等时,要做的是计算这两个数的差,看它是否小于某个很小的误差值。
其实使用浮点数还有其他一些问题,总之浮点数运算不同于实数运算,如果不认真处理有限精度运算中的不准确性,它就会给你带来麻烦的