單精度與算力
⑴ 單精度和雙精度有什麼區別,另外請列出各種數據類型在16位機和32位機分別占的位數
單精度浮點變數"與雙精度浮點變數"在內存的佔用上是不同的.一般float是4個位元組,而double是8個位元組.不同的編程語言可能不同,關於16位的機器,好像已經淘汰了吧。
⑵ 單精度和雙精度是什麼意思是小數點後多少位嗎
是C語言中的數據儲存類型,是類型的名字。計算機中的數據是二進制,當數字有效數字位數過多的時候儲存范圍之外的輸就會被四捨五入,表現出來的就是單精度有七位有效數字,雙精度有十五位有效數字。
⑶ C語言單精度與雙精度的區別
其實就是有效位數不一樣。
浮點型變數分為單精度(float)、雙精度(double)和長雙精度(long double)3類。在Turbo C 中:
比特(位)數 有效數字
float 32 6-7
double 64 15-16
long double 128 18-19
ANSI C 並未具體規定每種類型數據的長度、精度、數值范圍,有的系統將double所增加的32位全用於存放小數部分,這樣可以增加數值的有效范圍,減少舍入誤差。有的系統則將所增加的位(bit)一部分存放指數部分,這樣可以擴大數值范圍
⑷ 關於java單精度與雙精度的問題
單精度和雙精度的取值范圍和精度是不同的
單精度:float的精度是6位有效數字,取值范圍是10的-38次方到10的38次方,float佔用4位元組空間
雙精度:double的精度是15位有效數字,取值范圍是10的-308次方到10的308次方,double佔用8位元組空間。
⑸ 單精度與雙精度的區別
單精度與雙精度的區別:
1、單精度,也就是 float ,在 32 位機器上用 4 個位元組來存儲的;而雙精度double是用 8 個位元組來存儲的。
2,單精度和雙精度在計算機中的表示格式雖一樣,但由於位數存儲位不同,他們能表示的數值的范圍就不同,也就是能准確表示的數的位數就不同。
拓展資料:
單精度
單精度數是指計算機表達實數近似值的一種方式。VB中Single(單精度浮點型)變數存儲為 IEEE 32 位(4 個位元組)浮點數值的形式,它的范圍在負數的時候是從 -3.402823E38 到 -1.401298E-45,而在正數的時候是從 1.401298E-45 到 3.402823E38 。
雙精度浮點數
雙精度浮點數(double)是計算機使用的一種數據類型,使用 64 位(8位元組) 來存儲一個浮點數。 它可以表示十進制的15或16位有效數字,其可以表示的數字的絕對值范圍大約是:2.23x10-308~ 1.79x10308。IEEE754為其定製標准。
⑹ 單精度與雙精度是什麼意思有什麼區別
單精度小數點後面共能精確到7位小數。雙精度可精確到15位小數。它們都屬於浮點數。這就是他們之間最大的區別。千萬不可以弄混淆。
⑺ C語言中單精度和雙精度浮點型數據的數值范圍是多少怎麼算出來的請大蝦幫忙了!
float(單精度說明符),double(雙精度說明符)單精度型佔4個位元組(32位)內存空間,其數值范圍為3.4E-38~3.4E+38,只能提供七位有效數字。雙精度型佔8 個位元組(64位)內存空間,其數值范圍為1.7E-308~1.7E+308,可提供16位有效數字。
⑻ 數據的單精度和雙精度是什麼意思,還有長雙精度
數值型:整型與實型
1、 整型數據(integer long)
Integer和Long型數值都是整數,用戶有定義某一變數為整形變數後,給這一變數只能賦予整數。整數要比浮點數運算速度快並且佔用內存少。Integer型的數值有一定的范圍,-32768~32767,如果超出這一范圍,就要用Long。
2、 實型數值(single double)
單精度(Single)和雙精度(Double)型數值即為浮點數值,它表示的是帶小數的實數。單精度型能精確到七位,而雙精度能精確到15位。用戶在選用這些數據類型時,要注意變數所取值的范圍。並且數值為整數時,為了運算速度,不用把變數硬定義為浮點型。對於大的浮點數,可用D,E格式輸入輸出。
⑼ 單精度和雙精度
單精度和雙精度數值類型最早出現在C語言中(比較通用的語言裡面),在C語言中單精度類型稱為浮點類型(Float),顧名思義是通過浮動小數點來實現數據的存儲。這兩個數據類型最早是為了科學計算而產生的,他能夠給科學計算提供足夠高的精度來存儲對於精度要求比較高的數值。但是與此同時,他也完全符合科學計算中對於數值的觀念:
當我們比較兩個棍子的長度的時候,一種方法是並排放著比較一下,一種方法是分別量出長度。但是事實上世界上並不存在兩根完全一樣長的棍子,我們測量的長度精度受到人類目測能力和測量工具精度的限制。從這個意義上來說,判斷兩根棍子是否一樣長絲毫沒有意義,因為結果一定是False,但是我們可以比較他們兩個哪個更長或者更短。這個例子很好地概括了單精度/雙精度數值類型的設計初衷和存在意義。
基於上述認識,單精度/雙精度數值類型從一開始設計的時候,就不是一個准確的數值類型,他只保證在他這個數值類型的精度之內是准確的,精度之外則不保證,比方說,一個數值5.1,很可能存儲在單精度/雙精度數值中的實際值是5.100000000001或者5.09999999999999。導致這個現象的原因我們可以通過兩種方式來解釋:
簡單的解釋方法:
你可以嘗試在任何一個控制項的屬性面板中,設定他的寬度為:3.2CM,當你輸入完畢後,你會發現值自動變成了3.199cm,無論你怎麼改,你都無法輸入3.200CM,因為實際上在電腦中存儲的並不是CM為單位的數值,而是「緹」為單位的數值,而「緹」和CM之間的比值,是個很難被除盡的數,因此你輸入完畢後,電腦自動轉換成了最接近的「緹」值,然後再轉換成厘米顯示到屬性面板上,這一乘一除,兩次四捨五入,誤差就出來了。單精度/雙精度也是類似的原理,其實在二進制存儲的時候,單精度/雙精度都採用了類似相近分數的方法,而這樣的存儲是不可能做到准確的。
深入的解釋方法:
讓我們來看看我們存儲到數字介質中的單精度/雙精度值到底是怎麼樣的,我們使用如下代碼對單精度類型進行一個解剖:
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Sub floatTest()
Dim dblVar As Single
dblVar = 5.731 / 8
dblOutput dblVar
dblVar = dblVar * 2
dblOutput dblVar
dblVar = dblVar * 2
dblOutput dblVar
dblVar = dblVar * 2
dblOutput dblVar
dblVar = dblVar * 2
dblOutput dblVar
dblVar = dblVar * 2
dblOutput dblVar
End Sub
Public Sub dblOutput(ByVal dblVar As Single)
Dim bytVar(3) As Byte
Dim i As Integer, j As Integer
Dim strVar As String
CopyMemory ByVal VarPtr(bytVar(0)), ByVal VarPtr(dblVar), 4
strVar = dblVar & ": "
For i = 3 To 0 Step -1
For j = 7 To 0 Step -1
strVar = strVar & (bytVar(i) And 2 ^ j) / 2 ^ j
Next j
strVar = strVar & " "
Next i
Debug.Print strVar
End Sub
運行後我們得到輸出結果(輸出格式為高位左,低位右):
.716375: 00111111 00110111 01100100 01011010
1.43275: 00111111 10110111 01100100 01011010
2.8655: 01000000 00110111 01100100 01011010
5.731: 01000000 10110111 01100100 01011010
11.462: 01000001 00110111 01100100 01011010
22.924: 01000001 10110111 01100100 01011010
這里,我們把單精度類型轉化成了二進制數據輸出,這里我們看到,雖然這六個數字完全不同,但是他們的二進制存儲驚人地相似,我們看到紅色標記部分,每次都是加1,事實上,單精度數據類型使用從高位開始第1位作為正負標記位(綠色),第2位到第9位,是一個跨位元組的有符號位元組類型數據,這個數值決定了小數點移動的方向和位數(紅色),第10位到32位保存一個整數(藍色)在存儲過程中,電腦首先把輸入的值不斷移位(乘除2)直到這個數的整數部分佔用了全部24位的整數位,然後把移動的位數寫入浮點部分(紅色),而移位後的結果寫入整數部分(藍色和綠色),小數部分則舍棄。求值的時候則是反向過程,先根據正負位和整數位求值,然後根據紅色部分的整數來進行移位(乘除2的次方),最終才是我們得到的單精度數值。雙精度數值也是同樣原理,只是位數更多而已。
通過解剖單精度數值的二進制存儲格式,我們可以清楚看到,實際上單精度/雙精度的存儲,都要通過乘法和除法,其中必有舍入,如果恰好你的數值在除法中被舍入了,那麼你賦的初值就很可能與你最終存儲的值不完全相同,其中的微小差異,並不與單精度/雙精度的設計目標相違背。
當我們在資料庫中或者VBA代碼中使用一個單精度/雙精度數值的時候,也許你從界面上看不到區別,但是在實際的存儲中,這個差別卻真真切切地就在那裡,當你對其進行相等比較的時候,系統只是簡單地作二進制的比較,界面上無法體現的微小差異,在二進制比較面前卻無處遁形,於是,你的等於比較返回了一個意料之外的False。