#1
|
||||
|
||||
c語言數值資料大小的問題
請問一下先進,既然 unsigned long 和 float 都是用占用 4 byte 的長度,為何二者能表示的數值差那麼多?
unsigned long 只能表示到 4294967295,float 則可以表達到 +-3.4e38,亦即是正負339999995214436424907732413799364296704.000000 ? |
#2
|
||||
|
||||
簡單的回答
整數是直接儲存數值 浮點是儲存表示式,而不是實際的數值 浮點表示的是近似值
__________________
:: VNICSTUDIO 電子商務教學系統 :: 24h.Name 免費 DDNS 服務 :: SSL 數位憑證服務中心 :: 進銷存 | 會計軟體 | 電子商務 |
#4
|
||||
|
||||
32 位元
1bit 正負號 8bit 指數(次方) 23bit 尾數(小數點後面的數字) 64位元 1bit 正負號 11bit 指數(次方) 52bit 尾數(小數點後面的數字) 因為浮點是使用表示式儲存,所以計算方式也不同。浮點運算能力就是評定 CPU 運算能力很重要的一環。 很久很久以前為了報恩,曾利用浮點運算幹了些換式。 沒錢的時候某特定廠商提供免費的機器,所以後來申請到預算後,為了讓這家廠商得標,就採用技術標,誰的運算能力強就買誰的。這家的乘法運算比除法強,所以全面改寫程式碼,例如除以2,全部改寫成 乘以0.5
__________________
:: VNICSTUDIO 電子商務教學系統 :: 24h.Name 免費 DDNS 服務 :: SSL 數位憑證服務中心 :: 進銷存 | 會計軟體 | 電子商務 |
#5
|
||||
|
||||
十分感謝,以後還會常常麻煩您指導。
|
#6
|
|||
|
|||
unsigned long4字节 数字是精确的 例如 long a=1123310766
float4字节 仅仅精确7位数字 float b=1.23456789 理论上 前7位数字是准确的 实际上 可能只能精确5-6位 # include "stdio.h" main(){ float b[4]; b[0]=4.0; b[1]=4.1; b[2]=4.2; b[3]=4.3; for(int i=0;i<4;i++) if (b[i]>=4.1) printf("%f ",b[i]); } 这是float常见的笑话,它的数值实际是不精确的。
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。 此篇文章於 2015-05-22 06:44 AM 被 yumi 編輯。 |