信息技術(shù)float是什么意思 c語(yǔ)言float怎么用

這篇文章給大家聊聊關(guān)于信息技術(shù)float是什么意思,以及c語(yǔ)言float怎么用對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站哦。計(jì)算機(jī)是如何存儲(chǔ)小數(shù)的在C語(yǔ)言編程中...
這篇文章給大家聊聊關(guān)于信息技術(shù)float是什么意思,以及c語(yǔ)言float怎么用對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站哦。
計(jì)算機(jī)是如何存儲(chǔ)小數(shù)的在C語(yǔ)言編程中,應(yīng)該注意什么嗎
浮點(diǎn)型在內(nèi)存中的存儲(chǔ)分布方式因機(jī)器平臺(tái)而異,完全理解所有機(jī)器平臺(tái)中的浮點(diǎn)型存儲(chǔ)無(wú)疑是一件相當(dāng)麻煩的事。幸運(yùn)的是,大多機(jī)器平臺(tái)都遵守IEEE-754標(biāo)準(zhǔn),很可能讀者和我使用的平臺(tái)正是使用的IEEE-754標(biāo)準(zhǔn)。
IEEE-754是如何存儲(chǔ)浮點(diǎn)數(shù)的?IEEE-754浮點(diǎn)(32位)或雙精度(64位)有三個(gè)部分(在IEEE-854下也有類似的96位擴(kuò)展精度格式):符號(hào)位,表示數(shù)字是正的還是負(fù)的;指數(shù)位;以及指定實(shí)際數(shù)字的尾數(shù)位。以C語(yǔ)言中的單精度浮點(diǎn)數(shù)為例,下面是某位浮點(diǎn)數(shù)的位布局:
該浮點(diǎn)數(shù)的值等于尾數(shù)乘以2^x。讀者應(yīng)該注意,上圖是二進(jìn)制分?jǐn)?shù),因此0.1表示1/2。為了方便理解,我們可以將其與十進(jìn)制的小數(shù)對(duì)應(yīng)起來(lái):十進(jìn)制的0.1等于1*10^-1,所以二進(jìn)制的0.1等于1*2^-1,也即1/2。
“尾數(shù)+指數(shù)”模式存儲(chǔ)浮點(diǎn)數(shù)可能有一點(diǎn)問題,例如:2x10^-1=0.2x10^0=0.02x10^1,依此類推。同樣一個(gè)數(shù)字可能有多種“尾數(shù)+指數(shù)”的表示方法,而同時(shí)兼顧多種表示方法勢(shì)必會(huì)造成巨大的浪費(fèi)(也可能使在硬件中實(shí)現(xiàn)數(shù)學(xué)操作變得困難和緩慢)。
所以,“尾數(shù)+指數(shù)”的存儲(chǔ)模式需要一個(gè)統(tǒng)一的標(biāo)準(zhǔn)。事實(shí)上,IEEE-754確實(shí)已經(jīng)有標(biāo)準(zhǔn)了:假設(shè)給定一個(gè)二進(jìn)制的浮點(diǎn)數(shù),那么除非這個(gè)數(shù)是0,否則總有某個(gè)位是1。將小數(shù)點(diǎn)移到第一個(gè)1之后,調(diào)整指數(shù)位,這樣一來(lái),“尾數(shù)+指數(shù)”的唯一存儲(chǔ)方式就固定下來(lái)了,也即“1.mx2^n”形式。
既然小數(shù)點(diǎn)前總是1,那么上述標(biāo)準(zhǔn)下的“尾數(shù)+指數(shù)”的存儲(chǔ)模式甚至都不需要再花費(fèi)空間存儲(chǔ)小數(shù)點(diǎn)前的1.但是如果數(shù)字是零呢?IEEEStandardsCommittee通過將零作為一種特殊情況來(lái)解決這一問題:如果數(shù)字的每一位都為零,那么數(shù)字就被認(rèn)為是零。
現(xiàn)在讀者可能又有疑問了,因?yàn)?.0=1.0×2^0,上述存儲(chǔ)模式不存儲(chǔ)小數(shù)點(diǎn)前的1,也即尾數(shù)和指數(shù)部分都為0,而“如果數(shù)字的每一位都為零,那么數(shù)字就被認(rèn)為是零”,這樣看來(lái),1.0似乎是沒有辦法存儲(chǔ)的。
當(dāng)然可以存儲(chǔ)1.0。單精度浮點(diǎn)數(shù)的指數(shù)部分是“shift-127”編碼的,也即實(shí)際的指數(shù)等于eeeeee減去127,所以1.0的表示方法實(shí)際上是1.0×2^127。同樣的道理,最小值本應(yīng)該是2^-127,按照“shift-127”編碼指數(shù)部分,也即2^0,可是這樣又變成“指數(shù)部分和尾數(shù)部分都為零”了,因此在該標(biāo)準(zhǔn)下的最小值,實(shí)際上的寫法是2^1,也即2^-126。
在我看來(lái),為了表示0和1,舍棄最小值(2^-127)是非??扇〉淖龇?。零不是唯一的“特殊情況”。對(duì)于正無(wú)窮大和負(fù)無(wú)窮大,非數(shù)字(NaN),以及沒有數(shù)學(xué)意義的結(jié)果(例如,非實(shí)數(shù),或無(wú)窮大乘以零之類的計(jì)算結(jié)果)也有表示:如果指數(shù)的每一位都等于1,那么這個(gè)數(shù)字是無(wú)窮大,如果指數(shù)的每一位都等于1,并且尾數(shù)位也都等于1,那么這個(gè)數(shù)字就是NaN。符號(hào)位仍然區(qū)分+/-inf和+/-nan。
現(xiàn)在,讀者應(yīng)該明白IEEE-754浮點(diǎn)數(shù)的表示方法了,下面是幾個(gè)數(shù)字的表示方法:
作為程序員,了解浮點(diǎn)表示的某些特性是很重要的,下標(biāo)列出了單精度和雙精度IEEE浮點(diǎn)數(shù)的示例值:
注意,本文中的所有數(shù)字都假定為單精度浮點(diǎn)數(shù);上面包含雙精度浮點(diǎn)數(shù)用于參考和比較。在C語(yǔ)言程序開發(fā)中,數(shù)值的處理是一門值得深究的科學(xué)。本文不可能將復(fù)雜的數(shù)值算法以及相關(guān)的C語(yǔ)言程序開發(fā)經(jīng)驗(yàn)一一列出。事實(shí)上,討論如何以理想的數(shù)值精度進(jìn)行計(jì)算,就和討論如何編寫最快的C語(yǔ)言程序,如何設(shè)計(jì)一款優(yōu)秀的軟件一樣,主要取決于程序員本身的綜合素質(zhì)。
鑒于此,這里將嘗試介紹一些基礎(chǔ)的,我認(rèn)為每個(gè)C語(yǔ)言程序員都應(yīng)該知道的內(nèi)容。
相等首先,我們應(yīng)該明白C語(yǔ)言程序開發(fā)中的兩個(gè)浮點(diǎn)數(shù)何時(shí)相等??赡茏x者并不覺得難,因?yàn)樗坪魿語(yǔ)言中的==運(yùn)算符就能判斷兩個(gè)浮點(diǎn)數(shù)是否完全相等。
然而實(shí)際上,C語(yǔ)言中的==運(yùn)算符是逐位比較兩個(gè)操作數(shù)的,而兩個(gè)浮點(diǎn)數(shù)的精度總是有限的,在這種場(chǎng)景下,==運(yùn)算符的實(shí)際使用意義就沒有那么大了。
讀者應(yīng)該已經(jīng)明白,計(jì)算機(jī)存儲(chǔ)浮點(diǎn)數(shù)時(shí),很有可能是需要舍棄一些位的(如果該浮點(diǎn)數(shù)過長(zhǎng)),如果CPU或者相應(yīng)的程序沒有按照預(yù)期四舍五入,那么使用==運(yùn)算符判斷兩個(gè)浮點(diǎn)數(shù)是否相等可能會(huì)失敗。
例如,標(biāo)準(zhǔn)C語(yǔ)言函數(shù)庫(kù)三角函數(shù)cos()的實(shí)現(xiàn)其實(shí)只是一種多項(xiàng)式近似,也就是說(shuō),我們并不能指望cos(π/2)結(jié)果的每一個(gè)位都為零。在C語(yǔ)言程序開發(fā)中,我們甚至不能準(zhǔn)確的表示π。
看到這里,讀者應(yīng)該思考“相等到底是什么意思呢?”,對(duì)于大多數(shù)情況來(lái)說(shuō),兩個(gè)數(shù)“相等”意味著這兩個(gè)數(shù)“足夠接近”。本著這種精神,在實(shí)際的C語(yǔ)言程序開發(fā)中,程序員通常定義一個(gè)很小的值模擬“足夠接近”,并以此判斷兩個(gè)浮點(diǎn)數(shù)是否“足夠接近到相等”,例如:
宏flt_equals(a,b)正是通過判斷a和b的距離是否小于EPSILON(10的-7次方),來(lái)斷定a和b是否可以被認(rèn)為“相等”的。這樣的近似模擬技術(shù)有時(shí)候是有用的,有時(shí)候卻可能導(dǎo)致錯(cuò)誤結(jié)果,讀者應(yīng)該自行判斷它是否符合自己的程序。
在本例中,EPSILON可以看作是一種用于說(shuō)明程序精度的標(biāo)尺。應(yīng)該明白,衡量精度的應(yīng)該是有效數(shù)字,糾結(jié)EPSILON的具體大小并無(wú)意義,下面是一個(gè)例子。
假設(shè)在某段C語(yǔ)言程序中有兩個(gè)數(shù)字1.25e-20和2.25e-20,它倆的差值是1e-20,遠(yuǎn)小于EPSILON,但是顯然它倆并不相等。但是如果這兩個(gè)數(shù)字是1.2500000e-20和1.2500001e-20,那么就可以認(rèn)為它們是相等的。也就是說(shuō),兩個(gè)數(shù)字距離足夠接近時(shí),我們還需要關(guān)注需要匹配多少有效數(shù)字。
溢出計(jì)算機(jī)存儲(chǔ)空間總是有限的,因此數(shù)值溢出是C語(yǔ)言程序員最關(guān)心的問題之一。讀者應(yīng)該已經(jīng)知道,如果向C語(yǔ)言中的最大無(wú)符號(hào)整數(shù)加一,該整數(shù)將歸零,令人崩潰的是,我們并不能只通過看這個(gè)數(shù)字的方式獲知是否有溢出發(fā)生,歸零的整數(shù)看起來(lái)和標(biāo)準(zhǔn)零一模一樣。
當(dāng)溢出發(fā)生時(shí),實(shí)際上大多數(shù)CPU是會(huì)設(shè)置一個(gè)標(biāo)志位的,如果讀者懂得匯編,可以通過檢查該標(biāo)志位獲知是否有溢出發(fā)生。
float浮點(diǎn)數(shù)溢出時(shí),我們可以方便的使用+/-inf(無(wú)窮)。+inf(正無(wú)窮)大于任何數(shù)字,-inf(負(fù)無(wú)窮)小于任何數(shù)字,inf+1等于inf,依此類推。因此在C語(yǔ)言程序開發(fā)中,一個(gè)小技巧是,將整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù),這樣就方便判斷后續(xù)處理是否會(huì)造成溢出了。處理完畢后,再將該數(shù)轉(zhuǎn)換回整數(shù)即可。
不過,將整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)判斷是否溢出也是要付出代價(jià)的,因?yàn)楦↑c(diǎn)數(shù)可能沒有足夠的精度來(lái)保存整個(gè)整數(shù)。32位的整數(shù)可以表示任何9位十進(jìn)制數(shù),但是32位的浮點(diǎn)數(shù)最多只能表示7位的十進(jìn)制數(shù)。所以,如果將一個(gè)很大的整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù),可能不會(huì)得到期望的結(jié)果。
此外,在C語(yǔ)言程序開發(fā)中,int與float之間的數(shù)值類型轉(zhuǎn)換,包括float與double之間的數(shù)值類型轉(zhuǎn)換,實(shí)際上是會(huì)帶來(lái)一定的性能開銷的。
讀者應(yīng)該明白,在C語(yǔ)言程序開發(fā)中,不管是否使用整數(shù),都應(yīng)該小心避免數(shù)值溢出的發(fā)生,不僅僅是最開始和最終結(jié)果數(shù)值可能溢出,在一些計(jì)算的中間過程,可能會(huì)產(chǎn)生一些更大的值。一個(gè)經(jīng)典的例子是“C語(yǔ)言數(shù)字配方”計(jì)算復(fù)數(shù)的幅度問題,極可能造成數(shù)值溢出的C語(yǔ)言實(shí)現(xiàn)是下面這樣的:
假設(shè)該復(fù)數(shù)的實(shí)部re和虛部im都等于1e200,那么它們的幅度約為1.414e200,這的確在雙精度的允許范圍內(nèi)。但是,上述C語(yǔ)言代碼的中間過程將產(chǎn)生1e200的平方值,也即1e400,這超出了inf的范圍,此時(shí)上面的實(shí)現(xiàn)函數(shù)計(jì)算的平方根將仍然是無(wú)窮大。
因此,magnitude()函數(shù)的更佳C語(yǔ)言實(shí)現(xiàn)如下:
應(yīng)該明白,上述C語(yǔ)言代碼為了避免數(shù)值溢出,給出的實(shí)現(xiàn)實(shí)際上是一種近似。例如im等于1e200,re等于1,那么im/re的平方仍然能夠達(dá)到1e400,這會(huì)造成數(shù)值溢出。但是平方re/im卻是可以的,因?yàn)?e-400會(huì)被四舍五入到零,足夠接近得到正確的答案。
有效數(shù)字丟失上面討論的浮點(diǎn)數(shù)精度,以及相等問題只是C語(yǔ)言程序數(shù)值運(yùn)算中的冰山一角。“有效數(shù)字丟失”指的是一類情況,在這種情況下,程序員很可能丟失數(shù)值的準(zhǔn)確性。
前面我們提到,1.m的尾數(shù)形式確保小數(shù)點(diǎn)前總是1(非零時(shí)),既然如此,我們沒有必要再花費(fèi)一個(gè)位的空間用于存儲(chǔ)1。此時(shí),即使尾數(shù)只有最后一位為1,其他位都為0,那么它的有效數(shù)字也是全部的,因?yàn)樽钋胺接袀€(gè)“隱藏的1”。但是,如果兩個(gè)比較接近的浮點(diǎn)數(shù)相減,這個(gè)“隱藏的1”就會(huì)被抵消,最終得到的答案可能只剩下一位有效數(shù)字的精度。
幸運(yùn)的是,就像上面求復(fù)數(shù)幅度避免出現(xiàn)數(shù)值溢出一樣,避免兩個(gè)接近的數(shù)字相減出現(xiàn)精度損失的方法也是有的,但是并沒有一個(gè)通用的方法。這里給出一個(gè)簡(jiǎn)單的實(shí)例就是使用1/x的函數(shù)代替x的函數(shù),這對(duì)于處理二次運(yùn)算很有效。我的建議是,如果讀者發(fā)現(xiàn)自己的C語(yǔ)言程序給出了令人懷疑的數(shù)值,就應(yīng)該檢查一下相應(yīng)的減法運(yùn)算了。
看到這里,相信讀者應(yīng)該想到C語(yǔ)言程序中的加法可能也有同樣的問題:假設(shè)有數(shù)字1.0,現(xiàn)在將其與1e-20相加。程序很可能認(rèn)為1e-20很小,小于EPSILON,于是忽略它,得到答案1.0。這實(shí)際上也是一種精度損失。
經(jīng)驗(yàn)法則要完全規(guī)避C語(yǔ)言程序中的浮點(diǎn)數(shù)可能帶來(lái)的問題,工作量無(wú)疑是巨大的。為了簡(jiǎn)化問題,我們通常認(rèn)為浮點(diǎn)數(shù)帶來(lái)的精度問題是這樣的:對(duì)浮點(diǎn)數(shù)的操作越多,損失的精度也會(huì)越多。
正如前文舉的例子cos(π/2),C語(yǔ)言它的實(shí)現(xiàn)實(shí)際上是一種近似,得到的答案并不是0,而是6.12303E-17。不過就這個(gè)答案本身而言,它已經(jīng)足夠小,認(rèn)為等于0也沒什么大問題。但是如果我們下一步計(jì)算是除以1e-17,那么得到的答案就約是6了,這與預(yù)期的零相差甚遠(yuǎn)。
不要忘記整數(shù)最后,在C語(yǔ)言程序開發(fā)中,并不是只有浮點(diǎn)數(shù)才重要的,整數(shù)同樣重要,它的精確性是一個(gè)有用的工具。有時(shí)程序需要跟蹤變化的分?jǐn)?shù)(例如比例因子)。在這種情況下,既然浮點(diǎn)數(shù)受各種因素影響,那么我們完全可以將該分?jǐn)?shù)存儲(chǔ)為整數(shù)分子和分母來(lái)避免問題。在需要使用浮點(diǎn)數(shù)時(shí),隨時(shí)再做一次除法運(yùn)算就可以了。
c語(yǔ)言用什么編碼存放數(shù)據(jù)的
皖西學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系,摘要:C語(yǔ)言數(shù)據(jù)類型豐富,,究。在TurboC2.0中,float型,編碼長(zhǎng)度分別為4B、8B和10B,從左至右,第一位,,、11b和15b,剩余部分為尾數(shù)的編碼。存儲(chǔ)時(shí)以字節(jié)為單位將編碼逆序存放。,在實(shí)驗(yàn)的基礎(chǔ)上歸納出了實(shí)型數(shù)據(jù)的相關(guān)屬性。
diveiknai什么跑鞋好
亞瑟士、美津濃,銳步。
1、diveiknai(迪維酷納)是一家專門經(jīng)營(yíng)各類運(yùn)動(dòng)鞋的電商平臺(tái),其中,銷量大、性價(jià)比排名前三的跑鞋是亞瑟士、美津濃,銳步。
2、具體介紹如下:
①亞瑟士,綜合評(píng)分90,售價(jià)280元。
亞瑟士不僅高端產(chǎn)品做得好,面向大眾群體的平民線也做得相當(dāng)完善,無(wú)論日常慢跑鞋和越野跑鞋,都有對(duì)應(yīng)的入門級(jí)系列。
②美津濃,綜合評(píng)分870,售價(jià)300元。
美津濃跑鞋分為減震型、支撐型、競(jìng)速型和越野型,從入門級(jí)到頂級(jí)都有對(duì)應(yīng)款式可選,相當(dāng)豐富。入門級(jí)產(chǎn)品線不是很多,主要有Maxmizer系列和Spark系列。
③銳步,綜合評(píng)分84,售價(jià)129元。
銳步與化工企業(yè)巨頭巴斯夫合作,共同研發(fā)得出核心技術(shù)Floatride,基材為PEBAX,是一種比EVA或TPU為基材發(fā)泡的材料更輕、更彈的材料,同時(shí)緩震效果極佳,整體性能相當(dāng)突出,應(yīng)用在高端跑鞋上。
usbfloat充電是快充嗎
不是快充,電腦usb輸出電壓最大直流5V,輸出電流不大于500毫安,你的手機(jī)充電器輸出電流一定高于500毫安,一般都是1A的,有些手機(jī)是2A的。用usb給手機(jī)充電速度比充電器慢。
浮籌比率是什么
在股票軟件中表示冷熱的指標(biāo)叫CYF,嚴(yán)謹(jǐn)?shù)拿Q叫浮籌率。就是這些籌碼分為長(zhǎng)線持有者,鎖定了不賣的,還有被短線交易來(lái)交易去,被短線總在交易的就叫浮籌,浮籌所占的比率叫浮籌率,又叫CYF,這個(gè)F就是float,浮籌的意思,這個(gè)是做技術(shù)分析系統(tǒng)中表示冷熱的一些基本工具。
關(guān)于信息技術(shù)float是什么意思和c語(yǔ)言float怎么用的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
本文鏈接:http://xinin56.com/ruanjian/2016.html