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年!

一起学习,共同进步!