【C++菜鳥問題】C++浮點數(float、double)比較、相等判斷
文章推薦指數: 80 %
用"=="來比較兩個double應該相等的類型,返回真值完全是不確定的。
計算機對浮點數的進行計算的原理是隻保證必要精度內正確即可。
我們在判斷 ...
請輸入正確的登錄賬號或密碼
註冊
忘記密碼
首頁
未分類
正文
【C++菜鳥問題】C++浮點數(float、double)比較、相等判斷
原創
miaoyue_mm12344
2018-08-2612:00
浮點數在內存中的存儲機制和整型數不同,其有舍入誤差,在計算機中用近似表示任意某個實數。
具體的說,這個實數由一個整數或定點數(即尾數)乘以某個基數(計算機中通常是2)的整數次冪得到,這種表示方法類似於基數爲10的科學記數法。
所以浮點數在運算過程中通常伴隨着因爲無法精確表示而進行的近似或舍入。
但是這種設計的好處是可以在固定的長度上存儲更大範圍的數。
1、將字符串轉換爲float、double過程存在精度損失,只是float、double各自損失的精度不相同而已 std::stringstr="8.2"; floatcc=atof(str.c_str()); //cc的值爲8.1999998 std::stringstr="8.2"; doublecc=atof(str.c_str()); //cc的值爲8.19999999999999932、將float、double轉換爲字符過程中可能存在精度損失,但是通過%.8lf可以規避(1)float小數點前後加起來有效數字只有6位。
當給定的float有效數在6位以內轉換爲字符不會丟失精度,當有效位數大於6位就會存在精度丟失 //精度沒有丟失 charbuf[100]={'\0'}; floataa=8000.25; sprintf(buf,"%f",aa); //8000.250000 //精度沒有丟失 charbuf[100]={'\0'}; floataa=8.00025; sprintf(buf,"%f",aa); buf=8.000250 //精度丟失,存在誤差 charbuf[100]={'\0'}; floataa=8000.251; sprintf(buf,"%f",aa); //8000.250977 //精度丟失,存在誤差此時使用.8lf也無效 charbuf[100]={'\0'}; floataa=8000.251; sprintf(buf,"%.8lf",aa);//8000.25097656 (2)double小數前後加起來的有效數字只有16位,當給定的double有效數在16位以內轉換爲字符串不會丟失精度,當有效位數大於16位就會存在精度丟失 存在誤差 charbuf[100]={'\0'}; doubleaa=121.437565871234012; sprintf(buf,"%.20lf",aa);//121.43756587123401000000 //沒有誤差 charbuf[100]={'\0'}; doubleaa=8000.256165; sprintf(buf,"%.8lf",aa); std::cout<
也可以abs(x)<= EPSINON比如要判斷浮點數floatA和B是否相等,我們先令float x=A–B;並設constfloatEPSINON=0.00001; 則if((x>=-EPSINON)&&(x<=EPSINON);//或者if(abs(x) <=EPSINON)cout<
usingnamespacestd;
#include
延伸文章資訊
- 1浮點數比較大小 - w3c菜鳥教程
浮點數比較大小,在數算當中經常會涉及到判斷兩個數是否相等的情況對於整數很好處理a b這樣的一個語句就可以解決全部的問題但是對於浮點數是不同的 ...
- 2街口幣、P 幣3 大點數比較哪個最好用?回饋與使用期限?
先前點數經濟掀起一陣熱潮,各店家開始推出點數,並且讓點數與點數間能進行轉換,而在台灣點數討論度與使用度最多的有LINE Points、街口幣、P 幣, ...
- 3【懶人包】五大網購平台「點數X聯名卡」全攻略 - 卡優新聞網
【懶人包】五大網購平台「點數X聯名卡」全攻略 ; 點數期限. 依照通路、活動而有所不同,信用卡回饋為1年 ; 使用範圍. momo購物 ; 使用規則 · 1點價值1元 ○訂單折抵無上限.
- 42022 各銀行紅利點數卡信用卡折抵兌換比較 - Money101
Money101.com.tw 比較2022 年全台各家銀行信用卡紅利點數折抵與兌換相關優惠,想要快速累積信用卡紅利點數,或這是要輕鬆兌換,不管是花旗、中信、富邦、渣打、華南, ...
- 5Back to Basic: 談浮點數的比較 - novus log - 痞客邦
不熟悉浮點數的人最容易犯的錯誤之一,就是直接用== 或!= 比較兩個浮點數。以最常見的IEEE 754 浮點數來說,下面這樣的判斷式竟然不成立: if (0.1 + ...