999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C語言中浮點數的表示范圍淺析

2016-05-30 10:48:04田祎樊景博
軟件工程 2016年4期

田祎 樊景博

摘 要:浮點數是C語言中的一種數據類型,但在標準C中并沒有給出其具體的描述,即數的存儲格式及表示范圍。部分經典的C語言程序設計教程中給出了浮點數的表示范圍,但存在不嚴謹和值得商榷的地方。結合IEEE754標準,就C語言中浮點數內在存儲格式進行分析并給出結論。

關鍵詞:C語言;浮點數;表示范圍

中圖分類號:TP313 文獻標識碼:A

Abstract:The float is a data type in C language,but its in standard C and did not give a specific of description:that is the number of storage format and the scope of representation.Part of classically C language programming tutorial gives a range of floating-point represent,but there is not rigorous and need to discussion.Combined IEEE754 standards,provided analyzation and conclusions in C language in internal storage floating-point format.

Keywords:C language;floating-point;scope of representation

1 引言(Introduction)

浮點數運算是科學計算必須面對的問題,由于計算機內部本身不能精確地處理某些整數或小數,因此在運算時可能存在較大的誤差,運算結果將直接影響到系統的可靠性和安全性等。C語言因功能強大、程序設計靈活且支持底層應用,在科學計算、數據處理等領域中得到了廣泛應用,但C語言在浮點數運算方面也存在數據表示的不精確性等問題。經典C語言并沒有對浮點數專門說明,國內很多教材雖述及浮點數,但也只是給出表示范圍,對于浮點數的解釋尚不夠充分,描述尚不夠嚴謹,因此學生在對浮點數的學習過程中經常存在這樣或那樣理解上的困惑。這里就浮點數的表示范圍,結合IEEE754做進一步的分析,為以后浮點數教學和學習給出參考[1]。

2 浮點數的表示及范圍(The range of floating-point and representation)

總體而言,浮點數的表示形式一般格式指滿足一般的二進制數機器碼(包括定點整數和定點小數)的規定規則;而IEEE754[2]格式則在一般格式上進一步做了一些約定,以便表示數時比較方便和高效。

(1)一般表示法

其主要有兩種格式,分別如圖1和圖2所示。

一般浮點數尾數采用純小數(隱含位為0)來表示,即尾數M與定點小數表示方法相同,由于尾數的符號位決定整個浮點數的符號,故有時采用圖2的形式;當尾數真值為0(不論階碼何值),或階碼的值比能在機器中表示的最小值還小,計算機把該浮點數看成零值,稱為機器零,即浮點數表示不了真值絕對值很接近0的數,只能看成0處理;尾數通常用原碼或補碼表示,階碼一般用移碼或補碼表示。因此其表示范圍如圖3所示。

3 C語言中浮點數的表示(C language representation of floating point numbers)

C語言所使用的浮點數符合IEEE754標準,該標準在1985年審核通過,目的是讓遵守IEEE標準的機器之間運行的程序可以相互直接移植,另外也讓程序員可以輕松寫出有用的、魯棒的浮點數應用程序。

3.1 IEEE754

IEEE標準從邏輯上用三元組{S,E,M}表示一個數N[3],如圖4所示。

IEEE標準754規定了三種浮點數格式:單精度、雙精度、擴展精度,分別對應C語言里頭的float、double和long double。不同的編譯系統對long double型的處理方法不同,Turbo c分配16個字節,而Visual C++6.0則分配8個字節。

單精度:N共32位,其中S占1位、E占8位、M占23位,如圖5所示。

M雖然是23位或者52位,但它們只是表示小數點之后的二進制位數,也就是說,假定 M為“010110011...”,在二進制數值上其實是“.010110011...”。而事實上,標準規定小數點左邊還有一個隱含位[4],絕大多數情況下是1,當N對應的n非常小的時候,比如小于2^(-126)(32位單精度浮點數),于是M對應的m最后結果可能是“m=1.010110011...”或者“m=0.010110011...”。

3.2 楊路明先生教材中對實數類型的描述

楊路明先生在其主編的《C語言程序設計教程》是這樣描述實數類型的:實數類型的數據即實型數據,在C語言中實型數據又被稱為浮點型數據[1]。實型數據的值域在計算機中表示只是數學中實數的一個子集。Turbo C的實型數據又分為單精度型和雙精度型兩種,它們所占內存字節數及取值范圍如表1所示。

3.3 存在問題

根據以上描述,單精度數的取值范圍大約在-1038—1038;雙精度數的取值范圍大約-10308—10308,這個表述本身是沒有問題的,但為了有利于基礎教學,為學生建立一個正確的概念[5],認為以上表述不夠精確。因為尾數隱藏位值可能為1或者0,因此存在最小可以規格化的數。如果按標準規定隱藏位值為1,以上表述的取值范圍就過于籠統,而且從最小可規格化的數到0的表示之間,也沒有任何形式的過渡。比如最小規格化的數再小一點的數,便只能是0了,所以這種籠統的表示一方面不利于學生理解;另一方面,不能使學生真正明白為什么不能進行浮點數判等。

4 結論(Conclusion)

浮點數的表示范圍與階碼和尾數的位數以及采用的浮點數表示格式有關。IEEE754標準中,單精度數所能表示的最大正規格化數,其階碼和尾數的值分別為(11111110)b,(111 1111 1111 1111 1111 1111)b,該數二進制數值為1.(23個1)×2127,而能表示的最小正規格化數,其階碼和尾數部分的二進制值分別為1和0,該數二進制數值為1.(23個0)×2-126。同理可得,雙精度所能表示的最大正規格化數和最小正規格化數,其二進制數值分別為1.(51個1)×21023和1.(51個0)×21022。因此,在基礎課程教學中,應將其表示如表2所示。

由表2學習者可清楚看到浮點數的表示范圍,并可得到兩個問題,一是0如何表示,是否有正負0之分;二是在最小規格化數到0之間的數如何表示。

0的偏移指數為00…00b,有效數字段亦為00…00b。0的偏移指數是保留的,也就是說0的偏移數不能用來表示正常的實數。并且,只有0做除數時,0才有正負之分,否則正0和負0沒有區別。

當N對應的n非常小的時候,在最小規格化數到0之間,稱其為微小數,比如小于2^(-126)(32位單精度浮點數),于是M對應的m最后結果是m=0.010110011...,它的有效數字的最高位為0,這種表示為非規格化表示,引起精度丟失,但有效擴展了能表示的非常小數的范圍。

《C程序設計》是理工類專業學生步入計算機程序設計世界的第一門課程[5],建立科學嚴謹的計算機認識觀尤為重要,而楊路明先生主編的《C語言程序設計教程》是C語言教學的經典教材,在諸如以上討論的方面有值得商榷的地方,應該給予必要的論述,促使學生深入理解計算機的內部世界[6],為學生步入計算機世界打下一個良好的基礎。

參考文獻(References)

[1] 楊路明.C語言程序設計教程[M].北京:北京郵電大學出版社,2008.

[2] 唐朔飛.計算機組成原理(第2版)[M].北京:高等教育出版社,2011.

[3] 朱亞超.基于IEEE754的浮點數存儲格式分析研究[J].計算與信息技術,2010,8(10):1207-1280.

[4] IEEE Standard for Binary Floating-Point Arithmetic.ANSI/IEEE Standard 754-1985.Institute of Electrical and Electronics Engineers,August 1985.

[5] 田祎,樊景博.計算機程序設計語言類課程整合教學探討[J].商洛學院學報,2012,4(26):28-30.

[6] 田祎.項目教學法在計算機語言實驗教學中的應用[J].商洛學院學報,2010,5(24):91-93.

作者簡介:

田 祎(1983-),男,碩士,講師.研究領域:計算機應用技術.

樊景博(1966-),男,本科,教授.研究領域:數據庫.

主站蜘蛛池模板: 欧美国产在线一区| 精品视频一区二区三区在线播| 3D动漫精品啪啪一区二区下载| 青青草91视频| 欧美一区二区福利视频| 亚洲精品制服丝袜二区| 国产福利一区视频| 幺女国产一级毛片| 日本欧美成人免费| 91在线日韩在线播放| 国产91九色在线播放| 高清国产在线| 影音先锋亚洲无码| 2019国产在线| 欧美日韩动态图| 免费观看成人久久网免费观看| 国产精品手机视频一区二区| 日韩无码视频播放| 亚洲一级毛片免费观看| 国产成人精品高清在线| 亚洲日韩在线满18点击进入| 亚洲欧美成人影院| 亚洲福利视频一区二区| 996免费视频国产在线播放| 久久性妇女精品免费| 无遮挡国产高潮视频免费观看| 亚洲国产精品日韩欧美一区| 九九热精品免费视频| 三级视频中文字幕| 国产美女视频黄a视频全免费网站| 亚洲成人动漫在线观看| 狠狠干欧美| 国产色偷丝袜婷婷无码麻豆制服| 亚洲一区二区三区国产精华液| 一本色道久久88亚洲综合| 全色黄大色大片免费久久老太| 青青草综合网| 国产成年女人特黄特色大片免费| 亚洲经典在线中文字幕| 九九久久99精品| 日韩人妻无码制服丝袜视频| 无码精品福利一区二区三区| 久久久无码人妻精品无码| 成人av专区精品无码国产 | 99精品在线视频观看| 国产精品亚洲一区二区在线观看| 91免费国产在线观看尤物| 国产精品无码制服丝袜| 亚洲综合色在线| 亚洲无码在线午夜电影| 一级一级一片免费| 日韩精品成人网页视频在线| 久久这里只有精品国产99| 久久人午夜亚洲精品无码区| 亚洲天堂.com| 波多野衣结在线精品二区| 69视频国产| 91视频99| 国产欧美日韩91| 日韩美一区二区| 精品国产aⅴ一区二区三区| 免费aa毛片| 欧美视频在线观看第一页| 亚洲精品欧美日本中文字幕| 成年看免费观看视频拍拍| 无码日韩精品91超碰| 国产精品污污在线观看网站| 91视频国产高清| 亚洲av成人无码网站在线观看| 制服丝袜无码每日更新| 久久婷婷色综合老司机| 亚洲乱伦视频| 88av在线| 秘书高跟黑色丝袜国产91在线 | 国产理论一区| 国产日韩精品一区在线不卡| 欧洲av毛片| 99re在线观看视频| 亚洲女同一区二区| 中文纯内无码H| 亚洲欧美日韩综合二区三区| 亚洲欧美日韩动漫|