網域名稱俱樂部

網域名稱俱樂部 (https://www.domainclub.org/index.php)
-   一般軟體與網路使用討論 (https://www.domainclub.org/forumdisplay.php?f=43)
-   -   c語言數值資料大小的問題 (https://www.domainclub.org/showthread.php?t=38038)

哈啦 2015-05-21 04:17 PM

c語言數值資料大小的問題
 
請問一下先進,既然 unsigned long 和 float 都是用占用 4 byte 的長度,為何二者能表示的數值差那麼多?
unsigned long 只能表示到 4294967295,float 則可以表達到 +-3.4e38,亦即是正負339999995214436424907732413799364296704.000000 ?

Ricado 2015-05-21 05:26 PM

簡單的回答
整數是直接儲存數值
浮點是儲存表示式,而不是實際的數值
浮點表示的是近似值

哈啦 2015-05-21 05:59 PM

引用:

作者: Ricado (文章 196453)
簡單的回答
整數是直接儲存數值
浮點是儲存表示式,而不是實際的數值
浮點表示的是近似值

感謝,大致了解~yes,但不太懂浮點數實際儲存的樣子是如何??:teeth 它的10101的儲存表達的是類似 2.1e5這樣而非210000這樣嗎?

Ricado 2015-05-21 06:52 PM

引用:

作者: 哈啦 (文章 196454)
感謝,大致了解~yes,但不太懂浮點數實際儲存的樣子是如何??:teeth 它的10101的儲存表達的是類似 2.1e5這樣而非210000這樣嗎?

32 位元
1bit 正負號
8bit 指數(次方)
23bit 尾數(小數點後面的數字)

64位元
1bit 正負號
11bit 指數(次方)
52bit 尾數(小數點後面的數字)

因為浮點是使用表示式儲存,所以計算方式也不同。浮點運算能力就是評定 CPU 運算能力很重要的一環。

很久很久以前為了報恩,曾利用浮點運算幹了些換式。
沒錢的時候某特定廠商提供免費的機器,所以後來申請到預算後,為了讓這家廠商得標,就採用技術標,誰的運算能力強就買誰的。這家的乘法運算比除法強,所以全面改寫程式碼,例如除以2,全部改寫成 乘以0.5~cici

哈啦 2015-05-21 07:16 PM

引用:

作者: Ricado (文章 196456)
32 位元
1bit 正負號
8bit 指數(次方)
23bit 尾數(小數點後面的數字)

64位元
1bit 正負號
11bit 指數(次方)
52bit 尾數(小數點後面的數字)

因為浮點是使用表示式儲存,所以計算方式也不同。浮點運算能力就是評定 CPU 運算能力很重要的一環。

很久很久以前為了報恩,曾利用浮點運算幹了些換式。
沒錢的時候某特定廠商提供免費的機器,所以後來申請到預算後,為了讓這家廠商得標,就採用技術標,誰的運算能力強就買誰的。這家的乘法運算比除法強,所以全面改寫程式碼,例如除以2,全部改寫成 乘以0.5~cici

~yes 十分感謝,以後還會常常麻煩您指導。:bow

yumi 2015-05-22 06:24 AM

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常见的笑话,它的数值实际是不精确的。


所有時間均為 +8。現在的時間是 12:15 PM

Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.