日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

float 比較【轉(zhuǎn)】

 WUCANADA 2013-09-11
float 比較【轉(zhuǎn)】 2013-08-14 16:00:18

分類: C/C++

(1)浮點數(shù)的表示是不精確的,不能直接比較兩個數(shù)是否完全相等,一般都是在允許的某個范圍內(nèi)認為像個浮點數(shù)相等。
float 類型不能比較相等或不等,但可以比較>,<,>=,<=

如有兩個浮點數(shù)a,b,允許的誤差范 圍為1e-6,則abs(a-b)<=1e-6,即可認為a和b相等。
用==從語法上說沒錯,但是本來應(yīng)該相等的兩個浮點數(shù)由于計算機內(nèi)部表示的原因可能略有微小的誤差,這時用==就會認為它們不等。應(yīng)該使用兩個浮點數(shù)之間的差異的絕對值小于某個可以接受的值來判斷判斷它們是否相等,比如用
    if (fabs(price - p) < 0.000001)
來代替
    if (price == p)
同意樓上的,很多工程的應(yīng)用都是采用計算精確度的方式。
定義一個精度,用差的絕對值比較,在精度范圍內(nèi)就認為是相等的;大小可以直接比較。

還有一種方法就是擴大再取整,比如a=5.23,b=5.23,直接比較 a==b一般為false,但是a和b都擴大一百倍,然后強制轉(zhuǎn)換為int類型,再用==比較就可以了.

(2)float型變量和“零值”比較的方法:

const float EPSINON 0.000001;
if ((x >= EPSINON) && (x <= EPSINON))
浮點型變量并不精確,其中EPSINON是允許的誤差(即精度),所以不可將float變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”形式。如果寫成if (x == 0.0),則是錯誤的。
因為1.0在計算機中可能存為0.999999或1.00001等,很難恰好是1.0

-----------------
4.3.3 浮點變量與零值比較
【規(guī)則4-3-3】不可將浮點變量用“==”或“!=”與任何數(shù)字比較。
千萬要留意,無論是float 還是double 類型的變量,都有精度限制。所以一定要
避免將浮點變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”形式。
假設(shè)浮點變量的名字為x,應(yīng)當將
if (x == 0.0) // 隱含錯誤的比較
轉(zhuǎn)化為
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON 是允許的誤差(即精度)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多