2014-10-17 29 views
1

轉換文件與雙打花車編譯器(MSCV2005)後在代碼常量警告有關從doublefloat轉換像編譯時間常數爲浮動

... 
float r; 

r = (q1 + q2) * 0.5; 
... 

即使q1, q2都漂浮0.5似乎被處理作爲double

如何適應這種行爲,以便所有代碼內常量被視爲float s?

+0

它實際上是** **雙,而不是浮動** **這是「正常」的浮點在C.功能類似於**罪類型* *和** log **將雙打作爲參數,並返回雙打。浮點文字(如** 0.5 **)的類型爲double,而不是float。因此,在計算中使用float而不是double需要一些努力:** sinf **,** logf **,** 0.5f **。 – 2014-10-17 15:08:59

回答

9

使用一個f後綴,以表明常數是有float類型:

float q1 = ...; 
float q2 = ...; 
float r = (q1 + q2) * 0.5f; 

標準(§6.4.4.2浮點常量)說:

的無後綴的浮點常量的類型爲double。如果後綴fF,它有 類型float。如果後綴爲lL,則其類型爲long double

你問題中的常量沒有後綴,所以類型爲double

5

只需添加f常量後:

float f = 0.5f;