網域名稱俱樂部

網域名稱俱樂部 (https://www.domainclub.org/index.php)
-   一般軟體與網路使用討論 (https://www.domainclub.org/forumdisplay.php?f=43)
-   -   float和double (https://www.domainclub.org/showthread.php?t=36176)

哈啦 2014-02-27 10:40 PM

float和double
 
想請教一下,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

引用:

作者: 哈啦 (文章 190375)
想請教一下,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 這類來定義


所有時間均為 +8。現在的時間是 08:46 PM

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