PDA

查看完整版本 : float和double


哈啦
2014-02-27, 10:40 PM
想請教一下,float(單精度浮點數)和double(倍精度浮點數)這二個是數學名詞還是電腦名詞?

它們的不同主要在於要占用的記憶體大小不同,是嗎?

書上說,一個char型態是8 bits =1 byte,但int 在16位元的環境下可占16 bits,但在32位元的環境下則占 32bits,那char呢?還是8 bits?
float and double也會隨著環境改變所占記憶體大小嗎?

那我現在64位元的電腦,表示宣告int就可以儲存比-2147483648到2147483647還要再多的數值嗎?

thanks,

some
2014-02-28, 02:14 PM
在於小數後的長度

double 應該不是寫銀行或者國防, 太空等需要更精密運算應該是用不到?

a40136
2014-02-28, 09:08 PM
想請教一下,float(單精度浮點數)和double(倍精度浮點數)這二個是數學名詞還是電腦名詞?

它們的不同主要在於要占用的記憶體大小不同,是嗎?

書上說,一個char型態是8 bits =1 byte,但int 在16位元的環境下可占16 bits,但在32位元的環境下則占 32bits,那char呢?還是8 bits?
float and double也會隨著環境改變所占記憶體大小嗎?

那我現在64位元的電腦,表示宣告int就可以儲存比-2147483648到2147483647還要再多的數值嗎?

thanks,

對於Double, Float Size部分我不是很確定(我記得在不同平台上實做不見得一樣),如果想要比較明確的解,可以去參考IEEE 754內的規範,但其實很多地方沒依照規範在實做。

那最大的差異是? 看底下2段Code就知道了

float a = 1.f / 81;
float b = 0;
for (int i = 0; i < 729; ++ i)
b += a;
printf("%.7g\n", b); // prints 9.000023



double a = 1.0 / 81;
double b = 0;
for (int i = 0; i < 729; ++ i)
b += a;
printf("%.15g\n", b); // prints 8.99999999999996


雖然Double看起來比較精準,但實際上運行會慢很多。
Int的部分,主要是依照Compiler解釋,如果要準確來說,請使用
uint16_t
uint32_t 這類來定義