日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《编写高质量代码:改善c程序代码的125个建议》——建议4-2:浮点数转换为新类型时必须做范围检查...

發(fā)布時間:2025/3/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《编写高质量代码:改善c程序代码的125个建议》——建议4-2:浮点数转换为新类型时必须做范围检查... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本節(jié)書摘來自華章計算機《編寫高質(zhì)量代碼:改善c程序代碼的125個建議》一書中的第1章,建議4-2,作者:馬 偉 更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“華章計算機”公眾號查看。

建議4-2:浮點數(shù)轉(zhuǎn)換為新類型時必須做范圍檢查

關(guān)于浮點類型數(shù)據(jù)的轉(zhuǎn)換原則,在C99的6.3.1.4節(jié)與6.3.1.5節(jié)中做了非常重要的闡述,其表達的主要意思如下:
當我們將一個浮點類型的數(shù)據(jù)轉(zhuǎn)換成除_Bool類型之外的一個整型數(shù)據(jù)時,該浮點數(shù)的小數(shù)部分須被丟棄,只保留它的整數(shù)部分。如果浮點數(shù)整數(shù)部分的值無法使用這種整型表示方法時,其行為是未定義的。
與此同時,如果我們將一個整數(shù)類型的數(shù)據(jù)轉(zhuǎn)換成一個浮點類型時,如果該整型數(shù)據(jù)的值在該浮點數(shù)的取值范圍內(nèi),并且能夠被浮點類型精確表示,那么將會被正確轉(zhuǎn)換;如果該整型數(shù)據(jù)的值在該浮點數(shù)的取值范圍內(nèi),但不能夠被浮點類型精確表示,那么轉(zhuǎn)換的結(jié)果是最鄰近的稍大或者稍小的可表示值;但如果該整型數(shù)據(jù)的值在該浮點數(shù)的取值范圍外,其行為是未定義的。
當我們將一個double 類型降級轉(zhuǎn)換為float類型、將long double類型降級轉(zhuǎn)換到double或者float類型時,如果轉(zhuǎn)換的值在新類型的取值范圍內(nèi),并且能夠被新類型精確表示,那么將會被正確轉(zhuǎn)換;如果轉(zhuǎn)換的值在新類型的取值范圍內(nèi),但不能夠被新類型精確表示,那么轉(zhuǎn)換的結(jié)果是最鄰近的稍大或者稍小的可表示值;但如果轉(zhuǎn)換的值在新類型的取值范圍外,其行為是未定義的。
由此可見,為了避免浮點數(shù)據(jù)轉(zhuǎn)換時導(dǎo)致的未定義行為,我們應(yīng)該在轉(zhuǎn)換時對數(shù)據(jù)進行相關(guān)的范圍檢查。例如,下面的代碼清單1-23演示了如何將double類型轉(zhuǎn)換為int類型。

代碼清單1-23 double轉(zhuǎn)換為int類型示例 #include <stdio.h> #include<limits.h> int main(void) { double d1=2147483648.01;int i1=0;if(d1>(double)INT_MAX||d1<(double)INT_MIN){ }else{i1=(int)d1;}printf("i1=%d\n",i1);return 0; }

在上面的程序中,我們通過語句“if(d1>(double)INT_MAX||d1<(double)INT_MIN)”來對程序做類型轉(zhuǎn)換時的取值范圍檢查,這樣就可以避免在執(zhí)行語句“i1=(int)d1”時發(fā)生未定義行為。
但需要特別強調(diào)的是,上面的程序是建立在double類型的取值范圍大于int類型的取值范圍的基礎(chǔ)之上的。因此,在使用這種方法做取值范圍檢查時,你必須完全明白不同編譯器所對應(yīng)的相關(guān)類型的取值范圍。假設(shè)在某個編譯器中,double類型的取值范圍小于int類型的取值范圍,那么上面這種方法將是不可行的,實際上這種情況基本沒有。
相對于浮點數(shù)與整數(shù)之間的轉(zhuǎn)換,浮點數(shù)與浮點數(shù)之間的轉(zhuǎn)換就簡單多了。演示示例如代碼清單1-24所示。

代碼清單1-24  double與float類型轉(zhuǎn)換示例 #include <stdio.h> #include<limits.h> #include<float.h> int main(void) { long double ld1=1.7976931348623158e+308;double d1=1.0;double d2=1.0;float f1=1.0f;float f2=1.0f;/*double->float*/if(d1>FLT_MAX||d1<FLT_MIN){ }else{f1=(float)d1;}/*long double->double*/if(ld1>DBL_MAX||ld1<DBL_MIN){}else{d2=(double)ld1;}/*long double->float*/if(ld1>FLT_MAX||ld1<FLT_MIN){}else{f2=(float)ld1;}return 0; }

總結(jié)

以上是生活随笔為你收集整理的《编写高质量代码:改善c程序代码的125个建议》——建议4-2:浮点数转换为新类型时必须做范围检查...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人欧美一区二区三区黑人冫 | 国产一区二区三区在线视频观看 | 五月天激情视频在线观看 | 亚洲欲| 韩国bj大尺度vip福利网站 | 熊出没之冬日乐翻天免费高清观看 | 亚洲狼人综合网 | 五月婷婷在线播放 | 美女黄视频在线观看 | 日本美女黄色一级片 | 97视频免费在线观看 | 最近中文字幕无免费 | a∨鲁丝一区鲁丝二区鲁丝三区 | 欧美色图久久 | 国产av成人一区二区三区 | 女教师三上悠亚ssni-152 | 亚洲av永久无码精品一区二区国产 | 国产日韩网站 | 毛茸茸亚洲孕妇孕交片 | 在线观看亚洲区 | 乱色熟女综合一区二区三区 | 国产精品一区二区久久国产 | 亚洲精品理论 | 亚洲国产视频网站 | 动漫一区二区 | 国产小视频你懂的 | av资源在线 | 国产一级片免费播放 | 久久精品视频一区 | 国产伦精品一区二区三区免费视频 | 久久伊| 久久精品无码一区二区三区免费 | 九九热精品视频 | 久久蜜桃av | 亚洲视频免费观看 | www.sesehu| 日本久久高清 | 精品在线观看免费 | 欧美亚洲一区 | 黄色三级视频 | 国产福利视频一区二区 | 久久久久久伦理 | 亚洲欧洲精品一区二区三区 | 久久超碰av| 麻豆av剧情| www.爱色av.com| 片多多在线观看 | 97在线观视频免费观看 | 久久国产精品一区二区三区 | 天天操天天干天天操 | 亚洲成人三区 | 国产欧美日韩激情 | 日本国产精品 | 国产又色又爽又黄的 | 国产精品ww| 懂色av蜜臀av粉嫩av分享吧最新章节 | 久久综合爱 | 日本人妖japanesexxx | 天天碰视频 | 成人香蕉视频 | 伊人久久久久久久久 | 97视频人人 | 夫妻自拍偷拍 | 岛国精品资源网站 | 337p亚洲精品色噜噜狠狠 | 欧美黑人一级爽快片淫片高清 | 国产一区二区久久精品 | 黄网站免费视频 | 日本视频精品 | 男受被做哭激烈娇喘gv视频 | 亚洲天堂自拍偷拍 | 国产对白自拍 | 欧美午夜一区 | 亚洲午夜久久久久久久国产 | www.亚洲免费 | 国产经典久久 | 特级西西人体444www高清大胆 | 一级a毛片免费观看久久精品 | 国产性生活毛片 | 男人天堂v | 九九热九九 | 国产丝袜自拍 | 日韩欧美性视频 | 美国黄色一级视频 | 午夜秋霞| 久伊人| 在线观看国产免费视频 | 日韩高清二区 | 中文字幕第80页 | 成人777 | 男人av资源网 | 日韩激情av | aaa一级片 | 极品尤物魔鬼身材啪啪仙踪林 | 少妇无套高潮一二三区 | 欧美亚洲丝袜 | 日本视频在线看 | 国内91视频 | 日韩黄色一区 |