[英]Float value confusion in C
我的代碼是
void main()
{
float a = 0.7;
if (a < 0.7)
printf("c");
else
printf("c++");
}
它打印C
,這是細作為a
處理為雙恆定值,其值將是0.699999
,小於0.7
。
現在,如果我在a
和if condition
將值更改為0.1,0.2,0.3
直到0.9
,那么它會打印C++
,除了0.7 and 0.9
,它們都表示相等或者更大。
為什么這個概念不考慮所有價值?
你在說什么“概念”?
您提到的數字都不能精確地以二進制浮點格式表示(無論精度如何)。 您提到的所有數字最終都會在點之后具有無限數量的二進制數字。
由於float
和double
精度都沒有無限精度,因此float
和double
精度格式的實現將近似地表示這些值,最有可能是最近的可表示二進制浮點值。 float
和double
這些近似值將不同。 並且近似float
值可能最終大於或小於近似double
值。 因此,您觀察到的結果。
例如,在我的實現中, 0.7
的值表示為
+6.9999998807907104e-0001 - float
+6.9999999999999995e-0001 - double
同時, 0.1
的值表示為
+1.0000000149011611e-0001 - float
+1.0000000000000000e-0001 - double
如您所見,在第一個示例中, double
表示大於float
表示,而在第二個示例中,它是另一種方式。 (以上是十進制表示法,它們本身是四舍五入的,但它們確實有足夠的精度來充分說明效果。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.