轉換文件與雙打花車編譯器(MSCV2005)後在代碼常量警告有關從double
到float
轉換像編譯時間常數爲浮動
...
float r;
r = (q1 + q2) * 0.5;
...
即使q1, q2
都漂浮0.5
似乎被處理作爲double
。
如何適應這種行爲,以便所有代碼內常量被視爲float
s?
轉換文件與雙打花車編譯器(MSCV2005)後在代碼常量警告有關從double
到float
轉換像編譯時間常數爲浮動
...
float r;
r = (q1 + q2) * 0.5;
...
即使q1, q2
都漂浮0.5
似乎被處理作爲double
。
如何適應這種行爲,以便所有代碼內常量被視爲float
s?
使用一個f
後綴,以表明常數是有float
類型:
float q1 = ...;
float q2 = ...;
float r = (q1 + q2) * 0.5f;
標準(§6.4.4.2浮點常量)說:
的無後綴的浮點常量的類型爲
double
。如果後綴f
或F
,它有 類型float
。如果後綴爲l
或L
,則其類型爲long double
。
你問題中的常量沒有後綴,所以類型爲double
。
只需添加f
常量後:
float f = 0.5f;
它實際上是** **雙,而不是浮動** **這是「正常」的浮點在C.功能類似於**罪類型* *和** log **將雙打作爲參數,並返回雙打。浮點文字(如** 0.5 **)的類型爲double,而不是float。因此,在計算中使用float而不是double需要一些努力:** sinf **,** logf **,** 0.5f **。 – 2014-10-17 15:08:59