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

一起學習,共同進步!