数值范围

本文详细介绍了不同整型和浮点型的数据范围及有效数字,并特别指出浮点数运算的不精确性可能导致的问题,提供了比较浮点数的正确方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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 ) ) &amp;&amp; ( value1 <= ( value2 + error ) ) ) {},而更高级的方法如下:
if ( abs( value1 - value2 ) <= error ) {}
挑选误差值的时候一定要小心,它一定要比计算中所会出现的最大误差要大一点点。具体的值取决于特定的浮点数格式以及比较数的数量级,最后一个规则是:在比较两个浮点数是否相等时,要做的是计算这两个数的差,看它是否小于某个很小的误差值。
    其实使用浮点数还有其他一些问题,总之浮点数运算不同于实数运算,如果不认真处理有限精度运算中的不准确性,它就会给你带来麻烦的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值