編輯,因爲保羅指出10.0可能不是一個正確的例子來解釋這一點。
使用float時,您不能安全地使用== <或>運算符。原因是輸入爲1.1時的數字在使用非整數類型時不會是1.10000000000000000。因此,定義一個特定的誤差閾值增量,這可能是兩個最接近的浮點數之間最好的分辨率。 因此,如果你的10是一個計算值而不是硬編碼的,那麼float 10 = getXX(someinput);假設getXX()基於一些計算返回一些結果 float hundred = getXX(someinput);
然後做如K對比>(十三角)& &ķ<(百+增量)
這應該是足夠的,我相信。
因此,不要在沒有小誤差修正因子的情況下進行漂浮/雙打關係操作!
這裏是一個片段進行論證http://ideone.com/dxS9OI
#include <stdio.h>
int main(void) {
float eleven=11.0;
float one_dot_1=1.1;
float elevenUsingSummation = 0;
int i=0;
for(i=0; i<10; i++)
{
elevenUsingSummation+=one_dot_1;
}
printf("------------------------------\n"
"Floating point testing example \n"
"one_dot_1(2.10)=%2.10f, one_dot_1(2.20)=%2.20f\n"
"eleven(2.10)=%2.10f, eleven(2.20)=%2.20f\n"
"elevenusingsubmission(2.10)=%2.10f, elevenusingsubmission(2.20)=%2.20f\n"
"(elevenUsingSummation==eleven) evaluates to %s\n",
one_dot_1, one_dot_1, eleven, eleven, elevenUsingSummation, elevenUsingSummation,
elevenUsingSummation==eleven?"True":"False"
);
return 0;
}
C標準強制要求所有花車可表示爲雙打,即使浮點系統不符合IEEE 754.所以,'K <10.0f && k> 100.0f'和只要10和100與浮子完全一樣,k0 <10.0 && k> 100.0'就等同。這實際上是任何提供浮動的C編譯器。 –
@EricPostpischil';'是一個錯字。並感謝您的意見。糾正它。 – Saksham
@PascalCuoq感謝您的輸入。糾正它。 – Saksham