4.2用C語(yǔ)言表示:double d = 4.2。C語(yǔ)言中用于描述小數(shù)的數(shù)據(jù)類(lèi)型是float和double,float類(lèi)型表示單精度浮點(diǎn)數(shù),double表示雙精度浮點(diǎn)數(shù)。
1、float:
FLOAT 數(shù)據(jù)類(lèi)型用于存儲(chǔ)單精度浮點(diǎn)數(shù)或雙精度浮點(diǎn)數(shù)。浮點(diǎn)類(lèi)型的單精度值具有 4 個(gè)字節(jié),包括一個(gè)符號(hào)位、一個(gè) 8 位 excess-127 二進(jìn)制指數(shù)和一個(gè) 23 位尾數(shù)。
2、double:
double(雙精度浮點(diǎn)數(shù))使用 64 位(8字節(jié)) 來(lái)儲(chǔ)存一個(gè)浮點(diǎn)數(shù)。 它可以表示十進(jìn)制的15或16位有效數(shù)字。
擴(kuò)展資料
(1) 浮點(diǎn)型與整型
將浮點(diǎn)數(shù)(單雙精度)轉(zhuǎn)換為整數(shù)時(shí),將舍棄浮點(diǎn)數(shù)的小數(shù)部分, 只保留整數(shù)部分。將整型值賦給浮點(diǎn)型變量,數(shù)值不變,只將形式改為浮點(diǎn)形式, 即小數(shù)點(diǎn)后帶若干個(gè)0。注意:賦值時(shí)的類(lèi)型轉(zhuǎn)換實(shí)際上是強(qiáng)制的。
(2) 單、雙精度浮點(diǎn)型
由于C語(yǔ)言中的浮點(diǎn)值總是用雙精度表示的,所以float 型數(shù)據(jù)只是在尾部加0延長(zhǎng)為double型數(shù)據(jù)參加運(yùn)算,然后直接賦值。double型數(shù)據(jù)轉(zhuǎn)換為float型時(shí),通過(guò)截尾數(shù)來(lái)實(shí)現(xiàn),截?cái)嗲耙M(jìn)行四舍五入操作。
參考資料:百度百科-C語(yǔ)言類(lèi)型強(qiáng)制轉(zhuǎn)換
中國(guó)自古以來(lái)就使用十進(jìn)位制計(jì)數(shù)法,一些實(shí)用的計(jì)量單位也采用十進(jìn)制,所以很容易產(chǎn)生十進(jìn)分?jǐn)?shù),即小數(shù)的概念。
第一個(gè)將這一概念用文字表達(dá)出來(lái)的是魏晉時(shí)代的劉徽。他在計(jì)算圓周率的過(guò)程中,用到尺、寸、分、厘、毫、秒 、忽等7個(gè)單位;對(duì)于忽以下的更小單位則不再命名,而統(tǒng)稱(chēng)為“微數(shù)”。
到了宋、元時(shí)代,小數(shù)概念得到了進(jìn)一步的普及和更明確的表示。楊輝《日用算法》(1262年)載有兩斤換算 的口訣:“一求,隔位六二五;二求,退位一二五”,即1/16=0?0625;2/16=0?125。
這里的“隔位”、“退位”已含有指示小數(shù)點(diǎn)位置的意義。秦九韶則將單位注在表示整數(shù)部分個(gè)位的籌碼之下,例如: —Ⅲ—Ⅱ表示13.12寸 寸是世界上最早的小數(shù)表示法。
在歐洲和伊斯蘭國(guó)家,古巴比倫的六十進(jìn)制長(zhǎng)期以來(lái)居于統(tǒng)治地位,一些經(jīng)典科學(xué)著作都是采用六十進(jìn)制,因此十進(jìn)制小數(shù)的概念遲遲沒(méi)有發(fā)展起來(lái)。15世紀(jì)中亞地區(qū)的阿爾卡西(?~1429)是中國(guó)以外第一個(gè)應(yīng)用小數(shù)的人。
歐洲數(shù)學(xué)家直到16世紀(jì)才開(kāi)始考慮小數(shù),其中較突出的是荷蘭人斯蒂文(1548~1620),他在《論十進(jìn)制》(1583年)一書(shū)中明確表示法。例如把5.714記為:5◎7①1②4③或5,7'1''4'''。
而第一個(gè)把小數(shù)表示成今日世界通用的形式的人是德國(guó)數(shù)學(xué)家克拉維斯(1537~1612),他在《星盤(pán)》(1593年)一書(shū)中開(kāi)始使用小數(shù)點(diǎn)作為整數(shù)部分與小數(shù)部分之間的分界符。 而中國(guó)比歐洲早采用了小數(shù)三百多年。
由于“編碼總位數(shù)為8”的限制,真值-128無(wú)法用原碼、反碼來(lái)表示,似乎不能用上述規(guī)則來(lái)求解補(bǔ)碼,但實(shí)際上是可行的——只要不管它的最高位即可,操作辦法如下:
將128化為二進(jìn)制為:1 0000000,最高位為1,可以只對(duì)舍去最高位后剩余的7位進(jìn)行處理即可,首先取反得:1111111,加1得:1 0000000,最高位有進(jìn)位需丟棄,即得:0000000,加上符號(hào)位就得補(bǔ)碼:1 0000000。
又如,當(dāng)編碼總位數(shù)為4時(shí),真值X=+0.101的原碼、反碼、補(bǔ)碼均為:0 101。
真值X=-0.101的原碼、反碼、補(bǔ)碼依次為:1 101、1 010、1 011。
同理,特例,-1的補(bǔ)碼為:1 000。
在定點(diǎn)小數(shù)中,小數(shù)點(diǎn)隱含在第一位編碼和第二位編碼之間
定點(diǎn)小數(shù),是指小數(shù)點(diǎn)準(zhǔn)確固定在數(shù)據(jù)某個(gè)位置上的小數(shù),從實(shí)用角度看,都把小數(shù)點(diǎn)固定在最高數(shù)據(jù)位的左邊,小數(shù)點(diǎn)前邊再設(shè)一位符號(hào)位。按此規(guī)則,任何一個(gè)小數(shù)都可以被寫(xiě)成 :
N = NS . N-1 N-2 … N-M
如果在計(jì)算機(jī)中用m+1個(gè)二進(jìn)制位表示上述小數(shù),則可以用最高(最左)一個(gè)二進(jìn)制位表示符號(hào)(如用0表示正號(hào),則1就表示負(fù)號(hào)),而用后面的m個(gè)二進(jìn)制位表示該小數(shù)的數(shù)值。小數(shù)點(diǎn)不用明確表示出來(lái),因?yàn)樗偸枪潭ㄔ诜?hào)位與最高數(shù)值位之間,已成定論。定點(diǎn)小數(shù)的取值范圍很小,對(duì)用m+1個(gè)二進(jìn)制位的小數(shù)來(lái)說(shuō),其值的范圍為:
|N| ≤ 1-2^(-m) 即小于1的純小數(shù),這對(duì)用戶(hù)算題是十分不方便的,因?yàn)樵谒泐}前,必須把要用的數(shù),通過(guò)合適的 比例因子化成絕對(duì)值小于1的小數(shù),并保證運(yùn)算的中間和最終結(jié)果的絕對(duì)值也都小于1,在輸出真正結(jié)果時(shí),還要把計(jì)算的結(jié)果按相應(yīng)比例加以擴(kuò)大。
定點(diǎn)小數(shù)表示法,主要用在早期的計(jì)算機(jī)中,它最節(jié)省硬件。隨著計(jì)算機(jī)硬件成本的大幅度降低,現(xiàn)代的通用計(jì)算機(jī)都被設(shè)計(jì)成能處理與計(jì)算多種類(lèi)型數(shù)值的計(jì)算機(jī)。我們將主要通過(guò)定點(diǎn)小數(shù)討論數(shù)值數(shù)據(jù)的不同編碼方案,而且,定點(diǎn)小數(shù)也被用來(lái)表示浮點(diǎn)數(shù)的尾數(shù)部分。
如果是簡(jiǎn)單的小數(shù),假如用于表示錢(qián)數(shù)的,小數(shù)位兩位
那么就可以把所有數(shù)字都乘100,然后都變成整數(shù),然后最后輸出的時(shí)候,你記得里面是有兩位小數(shù)就行了,直接表示出來(lái)。
如果是專(zhuān)業(yè)的小數(shù)計(jì)算,那就要用到數(shù)字的浮點(diǎn)表示法,
原理是在幾個(gè)字節(jié)的表示中,有的二進(jìn)制用來(lái)表示數(shù)據(jù)的有效位,有的二進(jìn)制位用來(lái)表示這個(gè)數(shù)字的小數(shù)的位數(shù),有的用來(lái)表示符號(hào)。
有點(diǎn)類(lèi)似科學(xué)計(jì)數(shù)法,所有的數(shù)字都是0.abcEXY 比如0.25E3=250
二進(jìn)制的表示都是0.1XXX,所以,前面的1都省略,
你可以查一下計(jì)算機(jī)原理,有詳細(xì)的浮點(diǎn)數(shù)表示法
在匯編里,也有浮點(diǎn)數(shù)運(yùn)算語(yǔ)句
Java 語(yǔ)言支持兩種基本的浮點(diǎn)類(lèi)型: float 和 double ,以及與它們對(duì)應(yīng)的包裝類(lèi) Float 和 Double 。
它們都依據(jù) IEEE 754 標(biāo)準(zhǔn),該標(biāo)準(zhǔn)為 32 位浮點(diǎn)和 64 位雙精度浮點(diǎn)二進(jìn)制小數(shù)定義了二進(jìn)制標(biāo)準(zhǔn)。 IEEE 754 用科學(xué)記數(shù)法以底數(shù)為 2 的小數(shù)來(lái)表示浮點(diǎn)數(shù)。
IEEE 浮點(diǎn)數(shù)用 1 位表示數(shù)字的符號(hào),用 8 位來(lái)表示指數(shù),用 23 位來(lái)表示尾數(shù),即小數(shù)部分。作為有符號(hào)整數(shù)的指數(shù)可以有正負(fù)之分。
小數(shù)部分用二進(jìn)制(底數(shù) 2)小數(shù)來(lái)表示,這意味著最高位對(duì)應(yīng)著值 ?(2 -1),第二位對(duì)應(yīng)著 ?(2 -2),依此類(lèi)推。對(duì)于雙精度浮點(diǎn)數(shù),用 11 位表示指數(shù),52 位表示尾數(shù)。
IEEE 浮點(diǎn)值的格式如圖 1 所示。 圖 1. IEEE 754 浮點(diǎn)數(shù)的格式 因?yàn)橛每茖W(xué)記數(shù)法可以有多種方式來(lái)表示給定數(shù)字,所以要規(guī)范化浮點(diǎn)數(shù),以便用底數(shù)為 2 并且小數(shù)點(diǎn)左邊為 1 的小數(shù)來(lái)表示,按照需要調(diào)節(jié)指數(shù)就可以得到所需的數(shù)字。
所以,例如,數(shù) 1.25 可以表示為尾數(shù)為 1.01,指數(shù)為 0: (-1) 0*1.01 2*2 0 數(shù) 10.0 可以表示為尾數(shù)為 1.01,指數(shù)為 3: (-1) 0*1.01 2*2 3 特殊數(shù)字 除了編碼所允許的值的標(biāo)準(zhǔn)范圍(對(duì)于 float ,從 1.4e-45 到 3.4028235e+38),還有一些表示無(wú)窮大、負(fù)無(wú)窮大、-0 和 NaN(它代表“不是一個(gè)數(shù)字”)的特殊值。這些值的存在是為了在出現(xiàn)錯(cuò)誤條件(譬如算術(shù)溢出,給負(fù)數(shù)開(kāi)平方根,除以 0 等)下,可以用浮點(diǎn)值集合中的數(shù)字來(lái)表示所產(chǎn)生的結(jié)果。
這些特殊的數(shù)字有一些不尋常的特征。例如, 0 和 -0 是不同值,但在比較它們是否相等時(shí),被認(rèn)為是相等的。
用一個(gè)非零數(shù)去除以無(wú)窮大的數(shù),結(jié)果等于 0 。特殊數(shù)字 NaN 是無(wú)序的;使用 == 、 運(yùn)算符將 NaN 與其它浮點(diǎn)值比較時(shí),結(jié)果為 false 。
如果 f 為 NaN,則即使 (f == f) 也會(huì)得到 false 。如果想將浮點(diǎn)值與 NaN 進(jìn)行比較,則使用 Float.isNaN() 方法。
表 1 顯示了無(wú)窮大和 NaN 的一些屬性。 表 1. 特殊浮點(diǎn)值的屬性 表達(dá)式 結(jié)果 Math.sqrt(-1.0) -> NaN 0.0 / 0.0 -> NaN 1.0 / 0.0 -> 無(wú)窮大 -1.0 / 0.0 -> 負(fù)無(wú)窮大 NaN + 1.0 -> NaN 無(wú)窮大 + 1.0 -> 無(wú)窮大 無(wú)窮大 + 無(wú)窮大 -> 無(wú)窮大 NaN > 1.0 -> false NaN == 1.0 -> false NaN false NaN == NaN -> false 0.0 == -0.01 -> true 基本浮點(diǎn)類(lèi)型和包裝類(lèi)浮點(diǎn)有不同的比較行為 使事情更糟的是,在基本 float 類(lèi)型和包裝類(lèi) Float 之間,用于比較 NaN 和 -0 的規(guī)則是不同的。
對(duì)于 float 值,比較兩個(gè) NaN 值是否相等將會(huì)得到 false ,而使用 Float.equals() 來(lái)比較兩個(gè) NaN Float 對(duì)象會(huì)得到 true 。造成這種現(xiàn)象的原因是,如果不這樣的話(huà),就不可能將 NaN Float 對(duì)象用作 HashMap 中的鍵。
類(lèi)似的,雖然 0 和 -0 在表示為浮點(diǎn)值時(shí),被認(rèn)為是相等的,但使用 Float.compareTo() 來(lái)比較作為 Float 對(duì)象的 0 和 -0 時(shí),會(huì)顯示 -0 小于 0 。 浮點(diǎn)中的危險(xiǎn) 由于無(wú)窮大、NaN 和 0 的特殊行為,當(dāng)應(yīng)用浮點(diǎn)數(shù)時(shí),可能看似無(wú)害的轉(zhuǎn)換和優(yōu)化實(shí)際上是不正確的。
例如,雖然好象 0.0-f 很明顯等于 -f ,但當(dāng) f 為 0 時(shí),這是不正確的。還有其它類(lèi)似的 gotcha,表 2 顯示了其中一些 gotcha。
表 2. 無(wú)效的浮點(diǎn)假定 這個(gè)表達(dá)式…… 不一定等于…… 當(dāng)…… 0.0 - f -f f 為 0 f = g) f 或 g 為 NaN f == f true f 為 NaN f + g - g f g 為無(wú)窮大或 NaN 舍入誤差 浮點(diǎn)運(yùn)算很少是精確的。雖然一些數(shù)字(譬如 0.5 )可以精確地表示為二進(jìn)制(底數(shù) 2)小數(shù)(因?yàn)?0.5 等于 2 -1),但其它一些數(shù)字(譬如 0.1 )就不能精確的表示。
因此,浮點(diǎn)運(yùn)算可能導(dǎo)致舍入誤差,產(chǎn)生的結(jié)果接近 ― 但不等于 ― 您可能希望的結(jié)果。例如,下面這個(gè)簡(jiǎn)單的計(jì)算將得到 2.600000000000001 ,而不是 2.6 : double s=0; for (int i=0; i<26; i++) s += 0.1; System.out.println(s); 類(lèi)似的, .1*26 相乘所產(chǎn)生的結(jié)果不等于 .1 自身加 26 次所得到的結(jié)果。
當(dāng)將浮點(diǎn)數(shù)強(qiáng)制轉(zhuǎn)換成整數(shù)時(shí),產(chǎn)生的舍入誤差甚至更嚴(yán)重,因?yàn)閺?qiáng)制轉(zhuǎn)換成整數(shù)類(lèi)型會(huì)舍棄非整數(shù)部分,甚至對(duì)于那些“看上去似乎”應(yīng)該得到整數(shù)值的計(jì)算,也存在此類(lèi)問(wèn)題。例如,下面這些語(yǔ)句: double d = 29.0 * 0.01; System.out.println(d); System.out.println((int) (d * 100)); 將得到以下輸出:0.29 28 這可能不是您起初所期望的。
浮點(diǎn)數(shù)比較指南 由于存在 NaN 的不尋常比較行為和在幾乎所有浮點(diǎn)計(jì)算中都不可避免地會(huì)出現(xiàn)舍入誤差,解釋浮點(diǎn)值的比較運(yùn)算符的結(jié)果比較麻煩。最好完全避免使用浮點(diǎn)數(shù)比較。
當(dāng)然,這并不總是可能的,但您應(yīng)該意識(shí)到要限制浮點(diǎn)數(shù)比較。如果必須比較浮點(diǎn)數(shù)來(lái)看它們是否相等,則應(yīng)該將它們差的絕對(duì)值同一些預(yù)先選定的小正數(shù)進(jìn)行比較,這樣您所做的就是測(cè)試它們是否“足夠接近”。
(如果不知道基本的計(jì)算范圍,可以使用測(cè)試“abs(a/b - 1) < epsilon”,這種方法比簡(jiǎn)單地比較兩者之差要更準(zhǔn)確)。甚至測(cè)試看一個(gè)值是比零大還是比零小也存在危險(xiǎn) ―“以為”會(huì)生成比零略大值的計(jì)算事實(shí)上可能由于積累的舍入誤差會(huì)生成略微比零小的數(shù)字。
NaN 的無(wú)序性質(zhì)使得在比較浮點(diǎn)數(shù)時(shí)更容易發(fā)生錯(cuò)誤。當(dāng)比較浮點(diǎn)數(shù)時(shí),圍繞無(wú)窮大和 NaN 問(wèn)題,一種避免 gotcha 的經(jīng)驗(yàn)法則是顯式地測(cè)試值的有效性,而不是試圖排除無(wú)效值。
在清單 1 中,有兩個(gè)可能的用于特性的 setter 的實(shí)現(xiàn),該。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥(niǎo). 頁(yè)面生成時(shí)間:3.178秒