根據(jù)你需要在內(nèi)存中保存的數(shù)據(jù)決定的。
成都創(chuàng)新互聯(lián)公司專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、網(wǎng)站建設(shè)、湟中網(wǎng)絡(luò)推廣、成都小程序開(kāi)發(fā)、湟中網(wǎng)絡(luò)營(yíng)銷(xiāo)、湟中企業(yè)策劃、湟中品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供湟中建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):13518219792,官方網(wǎng)址:www.cdcxhl.com
簡(jiǎn)單來(lái)說(shuō),double常用于科學(xué)計(jì)算、對(duì)小數(shù)點(diǎn)后精度要求較高的場(chǎng)合;
float是32位,double是64位
float32位中,有1位符號(hào)位,8位指數(shù)位,23位尾數(shù)為
double64位中,1位符號(hào)位,11位指數(shù)位,52位尾數(shù)位
取值范圍看指數(shù)部分
float是有符號(hào)型,其中,8位指數(shù)位,2^8=(-128—127),因此實(shí)際的范圍是-2^128—2^127,約為-3.4E38—3.4E38
同理double范圍約是-1.7E308—1.7E308,樓主可以自己按下計(jì)算器試試看,印象深些
精度是看尾數(shù)部分
float尾數(shù)位23位,2^23=8.3E6,7位,所以不同的編譯器規(guī)定不同,有些是7位,有些8位
double尾數(shù)52位,2^52=4.5E15,15位,所以double的有效位數(shù)是15位
C語(yǔ)言中,單精度浮點(diǎn)型為float, 雙精度浮點(diǎn)型為double。具體區(qū)別如下:
1、 占用字節(jié)空間不同。
一個(gè)float變量占用四字節(jié),一個(gè)double類(lèi)型變量,一般占用8字節(jié)。
2、 表示范圍不同。
float表示范圍為-3.4E-38~3.4E+38。
double 表示范圍為-1.7E-308~1.7E+308。
3、 精度不同。
float在表示十進(jìn)制時(shí),有效數(shù)字為6到7位。
double在表示十進(jìn)制時(shí),有效數(shù)字為15到16位。
4、輸入輸出格式不同。
在C語(yǔ)言中,輸入輸出格式化字符串,float使用%f,而double使用%lf。
在C語(yǔ)言源碼中,只能在浮點(diǎn)數(shù)后面加f來(lái)表示單精度浮點(diǎn)數(shù)。譬如如下代碼:
float?f?=?1.1f;?
或者
float?f?=?1.1F;
大小寫(xiě)都可以的。
16進(jìn)制的浮點(diǎn)數(shù)編碼,它不像整數(shù)編碼那樣直觀(guān),因?yàn)楦↑c(diǎn)數(shù)編碼,在計(jì)算機(jī)中是以IEEE754格式進(jìn)行編碼編碼的,每一個(gè)二進(jìn)制位都有不同的意思,拿單精度浮點(diǎn)數(shù)來(lái)說(shuō),它的符號(hào)位占1位,指數(shù)位占8位,有效數(shù)字位占23位,而且,如果使用十六進(jìn)制來(lái)傳送,你還要確定計(jì)算機(jī)的內(nèi)存,存儲(chǔ)順序。 相對(duì)很復(fù)雜的。
要了解更多浮點(diǎn)數(shù)編碼的問(wèn)題,可以自己找一下IEEE754編碼格式詳細(xì)的介紹。也許會(huì)幫到你!
單精度和雙精度顧名思義是兩種精度的不同劃分,單精度f(wàn)loat是保證7位有效數(shù)字,double是保證16位有效數(shù)字。
例:(float)(10%3)
結(jié)果是1.000000即七位有效數(shù)字,(后面不一定全是0,計(jì)算機(jī)可隨機(jī)選擇數(shù)字,所以整數(shù)1不等于float或double的1)
(double)(10%3)
同理結(jié)果是:1.XXXXXXXXXX……后面有十五位的有效數(shù)字
雖然整數(shù)位都是1,但由于有效位數(shù)不同,即后面隨機(jī)派出的小數(shù)可能不同,所以二者理論上不同,實(shí)際比較不能用==,要用fabs()1e-6.
單精度是float
雙精度是double
都是浮點(diǎn)型,所謂浮點(diǎn)就是只能表示近似值,不能表示準(zhǔn)確值,最后的幾位小數(shù)是不準(zhǔn)確的。
如:
#includestdio.h
void main()
{
double a=2.9999999;
printf("%f ",a);
a=2.99999998;
printf("%f ",a);
a=2.99999997;
printf("%f ",a);
a=2.99999996;
printf("%f ",a);
a=2.99999995;
printf("%f ",a);
printf("%\n ");
//輸出結(jié)果都是3.000000
a=2.9999949;
printf("%f ",a);
a=2.9999948;
printf("%f ",a);
a=2.9999947;
printf("%f ",a);
a=2.9999946;
printf("%f ",a);
//輸出結(jié)果都是2.999995
}
單精度就是精度小點(diǎn) 范圍小 小數(shù)點(diǎn)后面的位數(shù)少
雙精度就是精度大點(diǎn) 范圍大 小數(shù)點(diǎn)后面的位數(shù)多