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