我有以下代碼行。浮點計算給出不同的結果與浮動比雙倍
hero->onBeingHit(ENEMY_ATTACK_POINT * (1.0 - hero->getDefensePercent()));
void onBeingHit(int decHP)
方法接受整數和更新健康點。float getDefensePercent()
方法是返回英雄防禦百分比的getter方法。ENEMY_ATTACK_POINT
是定義爲#define ENEMY_ATTACK_POINT 20
的宏常數因子。
比方說hero->getDefensePercent()
返回0.1
。因此,計算
20 * (1.0 - 0.1) = 20 * (0.9) = 18
每當我用下面的代碼試了一下(不f
追加1.0
)
hero->onBeingHit(ENEMY_ATTACK_POINT * (1.0 - hero->getDefensePercent()));
我。
但對於下面的代碼(1.0
後f
附加)
hero->onBeingHit(ENEMY_ATTACK_POINT * (1.0f - hero->getDefensePercent()));
我。
這是怎麼回事?儘管hero->getDefensePercent()
已經浮動,但是f
有意義嗎?
您不能保存'.9'或'.1'準確(浮點數據類型)。可能是雙精度較低會導致類似'18.00x'而不是'17.999xxx'。請注意,'浮點 - > int'總是停下來。 – Zeta 2013-02-15 07:55:17
不太瞭解C++,但我期望你的文字被解釋爲'double',從而迫使計算以'double'而不是'float'來完成。 – 2013-02-15 07:57:00
'ENEMY_ATTACK_POINT'是一個整數。由於您使用整數數學,因此您會遇到四捨五入錯誤。 – Pubby 2013-02-15 07:58:00