亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于C++浮點(diǎn)數(shù)(float、double)類型數(shù)據(jù)比較與轉(zhuǎn)換的詳解

 更新時間:2013年05月16日 17:00:47   作者:  
本篇文章是對C++中浮點(diǎn)數(shù)(float、double)類型數(shù)據(jù)比較與轉(zhuǎn)換進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
浮點(diǎn)數(shù)在內(nèi)存中的存儲機(jī)制和整型數(shù)不同,其有舍入誤差,在計算機(jī)中用近似表示任意某個實(shí)數(shù)。具體的說,這個實(shí)數(shù)由一個整數(shù)或定點(diǎn)數(shù)(即尾數(shù))乘以某個基數(shù)(計算機(jī)中通常是2)的整數(shù)次冪得到,這種表示方法類似于基數(shù)為10的科學(xué)記數(shù)法。
所以浮點(diǎn)數(shù)在運(yùn)算過程中通常伴隨著因?yàn)闊o法精確表示而進(jìn)行的近似或舍入。但是這種設(shè)計的好處是可以在固定的長度上存儲更大范圍的數(shù)。
1、將字符串轉(zhuǎn)換為float、double過程存在精度損失,只是float、double各自損失的精度不相同而已
std::string str="8.2";
float cc=atof(str.c_str());  //cc的值為8.1999998
std::string str="8.2";
double cc=atof(str.c_str());  //cc的值為8.1999999999999993
2、將float、double轉(zhuǎn)換為字符過程中可能存在精度損失,但是通過%.8lf可以規(guī)避
(1)float小數(shù)點(diǎn)前后加起來有效數(shù)字只有6位。當(dāng)給定的float有效數(shù)在6位以內(nèi)轉(zhuǎn)換為字符不會丟失精度,當(dāng)有效位數(shù)大于6位就會存在精度丟失
//精度沒有丟失
char buf[100]={'\0'};
float aa=8000.25;
sprintf(buf,"%f",aa);   //8000.250000
//精度沒有丟失
char buf[100]={'\0'};
float aa=8.00025;
sprintf(buf,"%f",aa);   buf = 8.000250
//精度丟失,存在誤差
char buf[100]={'\0'};
float aa=8000.251;
sprintf(buf,"%f",aa);  //8000.250977
//精度丟失,存在誤差此時使用.8lf也無效
char buf[100]={'\0'};
float aa=8000.251;
sprintf(buf,"%.8lf",aa); //8000.25097656
(2)double小數(shù)前后加起來的有效數(shù)字只有16位,當(dāng)給定的double有效數(shù)在16位以內(nèi)轉(zhuǎn)換為字符串不會丟失精度,當(dāng)有效位數(shù)大于16位湖影公寓存在精度丟失
存在誤差
char buf[100]={'\0'};
double aa=121.437565871234012;
sprintf(buf,"%.20lf",aa); //121.43756587123401000000
//沒有誤差
char buf[100]={'\0'};
double aa=8000.256165;
sprintf(buf,"%.8lf",aa);
std::cout <<buf<<std::endl; //8000.25616500
3、浮點(diǎn)數(shù)比較
用"=="來比較兩個double應(yīng)該相等的類型,返回真值完全是不確定的。計算機(jī)對浮點(diǎn)數(shù)的進(jìn)行計算的原理是只保證必要精度內(nèi)正確即可。
我們在判斷浮點(diǎn)數(shù)相等時,推薦用范圍來確定,若x在某一范圍內(nèi),我們就認(rèn)為相等,至于范圍怎么定義,要看實(shí)際情況而已了,float,和double 各有不同
所以const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON) 這樣判斷是可取的
至于為什么取0.00001,可以自己按實(shí)際情況定義
根據(jù)上面分析建議在系統(tǒng)開發(fā)過程中設(shè)計到字符轉(zhuǎn)換建議采用double類型,精度設(shè)置為%.8lf即可,在比較浮點(diǎn)數(shù)十建議EPSINON = 0.00000001

相關(guān)文章

  • C++文件讀和寫的使用

    C++文件讀和寫的使用

    本文主要介紹了C++文件讀和寫的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • C++ lambda函數(shù)詳解

    C++ lambda函數(shù)詳解

    小編可以明確告訴大家:lambda函數(shù)是C++11中最重要的,使用最廣泛的,最具現(xiàn)代風(fēng)格的內(nèi)容,lambda函數(shù)的出現(xiàn)改變了C++編程的思維方式。所以快和小編學(xué)習(xí)一下C++11中l(wèi)ambda函數(shù)的使用吧
    2023-02-02
  • C和C++的區(qū)別詳解

    C和C++的區(qū)別詳解

    這篇文章主要介紹了C和C++之間的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • 深入C++中inline關(guān)鍵字的使用

    深入C++中inline關(guān)鍵字的使用

    本篇文章是對C++中inline關(guān)鍵字的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 如何使用VC庫函數(shù)中的快速排序函數(shù)

    如何使用VC庫函數(shù)中的快速排序函數(shù)

    下面呢,小編就為大家介紹一下VC中庫函數(shù)qsort()的用法。需要的朋友可以過來參考下
    2013-09-09
  • 如何在C語言的宏中使用類型關(guān)鍵字

    如何在C語言的宏中使用類型關(guān)鍵字

    如何在C語言的宏中使用類型關(guān)鍵字呢?以下是實(shí)現(xiàn)方法。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • 用C語言實(shí)現(xiàn)簡單的計算器功能

    用C語言實(shí)現(xiàn)簡單的計算器功能

    這篇文章主要為大家詳細(xì)介紹了用C語言實(shí)現(xiàn)簡單的計算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++ 實(shí)現(xiàn)即時通信的示例代碼(直接運(yùn)行)

    C++ 實(shí)現(xiàn)即時通信的示例代碼(直接運(yùn)行)

    本文主要介紹了C++ 實(shí)現(xiàn)即時通信的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C++ 遞歸遍歷文件并計算MD5的實(shí)例代碼

    C++ 遞歸遍歷文件并計算MD5的實(shí)例代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于C++ 遞歸遍歷文件并計算MD5的實(shí)例代碼,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-07-07
  • 基于C語言實(shí)現(xiàn)三子棋游戲的示例代碼

    基于C語言實(shí)現(xiàn)三子棋游戲的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言數(shù)組實(shí)現(xiàn)簡單的三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評論