簡體   English   中英

C中浮動值混淆

[英]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

現在,如果我在aif condition將值更改為0.1,0.2,0.3直到0.9 ,那么它會打印C++ ,除了0.7 and 0.9 ,它們都表示相等或者更大。

為什么這個概念不考慮所有價值?

你在說什么“概念”?

您提到的數字都不能精確地以二進制浮點格式表示(無論精度如何)。 您提到的所有數字最終都會在點之后具有無限數量的二進制數字。

由於floatdouble精度都沒有無限精度,因此floatdouble精度格式的實現將近似地表示這些值,最有可能是最近的可表示二進制浮點值。 floatdouble這些近似值將不同。 並且近似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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM