C语言之最值
- 2020 年 2 月 19 日
- 筆記
欢迎关注VxWorks567
如转发,请标明出处!
大家应该都知道整型数的最小值与最大值

那浮点数呢?有点复杂!而且任意区间内,浮点的数量都是无限的。所以计算机中表示的浮点肯定是跳跃式的。
float(符号占1位,指数占8位,尾数小数占23位)的最值如下
- 111111111尾数的23位不全为0,例如0xFF800001: 表示不是数值,VxWorks中用NaN表示无效数值
- 11111111100000000000000000000000 = 0xFF800000:表示负无穷大,VxWorks中用Inf表示无穷大
- 11111111011111111111111111111111 = 0xFF7FFFFF:表示最小的负数,即-2128,约等于-3.402824*1038
- 10000000100000000000000000000000 = 0x80800000:表示最大的负数,即-2-126,约等于-1.175494*10-38,不过printf精度有限,一般就显示为0了
- 00000000000000000000000000000000 = 0x00000000:表示0
- 00000000100000000000000000000000 = 0x00800000:表示最小的正数,即2-126,约等于1.175494*10-38
- 01111111011111111111111111111111 = 0x7F7FFFFF:表示最大的正数,即2128,约等于3.402824*1038
- 01111111100000000000000000000000 = 0x7F800000:表示正无穷大
- 011111111尾数的23位不全为0,例如0x7F800001: 表示不是数值

double(符号占1位,指数占11位,尾数小数占52位)的最值如下
- 111111111111尾数的52位不全为0,例如0xFFF0000000000001: 表示不是数值
- 111111111111尾数的52位全为0 = 0xFFF0000000000000: 表示负无穷大
- 111111111110尾数的52位全为1 = 0xFFEFFFFFFFFFFFFF: 表示最小的负数,即-21024,约等于-1.797693*10308
- 100000000001尾数的52位全为0 = 0x8010000000000000: 表示最大的负数,即-2-1022,约等于-2.225074*10-308
- 000000000000尾数的52位全为0 = 0x0000000000000000: 表示0
- 000000000001尾数的52位全为0 = 0x0010000000000000: 表示最小的正数,即2-1022,约等于2.225074*10-308
- 011111111110尾数的52位全为1 = 0x7FEFFFFFFFFFFFFF: 表示最大的正数,即21024,约等于1.797693*10308
- 011111111111尾数的52位全为0 = 0x7FF0000000000000: 表示正无穷大
- 011111111111尾数的52位不全为0,例如0x7FF0000000000001: 表示不是数值

可以看到,因为表示的浮点是不连续的,所以存在最大负数和最小正数之类的浮点数
我是泰山,专注VX 15年!
一起学习,共同进步!