A. c語言雙精度的寫法問題 c裡面怎麼把1.0寫成雙精度是寫成1.d0嗎
如果要將雙精度常量存入變數中,那麼變數的類型一定要聲明為雙精度,也就是double,如
double i = 1.0;
你的寫法是有問題的,C中帶小數點的數默認是雙精度的,所以你後面的寫法是多餘的,但是
float i = 1.0;
至少會給出警告,需要
float i = 1.0f;
不知道你為什麼要使用雙精度,因為能使用單精度就應該使用單精度,雙精度不是僅僅增加了精度,而且還會增加計算機的運算時間和存儲空間。
應該就這些,希望我說清楚了。
B. C語言如何輸入雙精度數據
C語言用scanf()函數輸入雙精度數據時,採用的數據格式參數必須是%lf,如:
doubled;
scanf("%lf",&d);
scanf("%f,%f",&a,&b);不能輸入雙精度數據嗎?
當然不能。主要原因在於double和float類型的大小不同:
double類型數據在內存中存儲佔8位元組(64位),按IEEE754標准存儲,格式為:1位符號位+11位指數位+52位小數位
float類型數據在內存中存儲佔4位元組(32位),按IEEE754標准存儲,格式為:1位符號位+8位指數位+23位小數位
當輸入數據格式串為%f時,scanf()按float類型將輸入的數據存儲到內存地址中,這時,若再按double類型解釋輸出數據時,數據當然不是用戶輸入的內容了。
C. 長雙精度類型的數據輸入輸出格式該怎麼表示
在一般的系統內,一個double(雙精度)型數據佔8個位元組,即64bit,可存儲15~16位長的有效數字,數值范圍一般約為10^-308~10^308。(10^表示10的次方)。不過上述數字在不同的機器系統中略有差別,考試的話這些數字就夠用了。
D. 匯編語言,雙精度的代碼問題
DD不是雙精度,是雙字,對16位機來說,一個字是2個byte, DD是4個byte
mov ax, datas
mov ds, ax
是把數據段的首地址賦值給ds,並不是把d_seg的內容賦值給ds,你搞混了。
舉個簡單例子:
datas segment
var1 db 100 p('a') ;定義100個byte,值賦為'a'
datas ends
mov ax, datas
mov ds, ax
假如datas的首地址為0800:1000
則var1的首地址也是0800:1000
而mov ds,ax之後,
ds中的地址即為:0800:1000
是說ds指向的地址是數據段的首地址,並不是說ds指定是數據段中變數的值 'a'
E. c語言中什麼是單精度型和雙精度型各舉個例子。。。
單精度型和雙精度型的區別在於它們的精確程度不一樣,也就是小數部分的有效位數不一樣。
單精度數(float型)在32位計算機中存儲佔用4位元組,也就是32位,有效位數為7位,小數點後6位;雙精度數(double型)在32位計算機中存儲佔用8位元組,也就是64位,有效位數為16位,小數點後15位。
比如3.1415926535897932384這個小數,如果定義成float型,那麼只會留下小數點後5位,也就是3.141592,如果定義成double型,那麼只會留下小數點後15位,也就是3.141592653589793。
(5)雙精度存儲格式代碼擴展閱讀
計算機的數都是以二進制進行存儲。無論是單精度浮點數還是雙精度浮點數,在計算機上的存儲都遵循IEEE 754規范,使用二進制科學計數法。
二進制科學計數法包含三個部分:符號位,指數位和尾數部分。單精度數的符號位,指數位和尾數部分分別為1,8,23,而雙精度為1,11,52。
而單雙精度中的精度就主要取決於尾數部分的位數。float的尾數尾數為23位,除去全部為0的情況以外,最小為2的-23次方,因此float小數部分只能精確到後面6位。類似的,double尾數位數為52,最小為2的-52次方,因此只能精確到小數點後15位。
F. asp編程,要求輸入帶2位小數的數字後保存在雙精度欄位,怎麼寫能給段完整的代碼嗎
FormatCurrency(num,2,true)
用這個函數就可以得到2位小數的數字
num是你要進行換算的數字
G. vb 怎麼將數據類型寫成雙精度型
1、因為此數據類型的有效數字是16位,它是單精度實數(有效數字8位)精度的兩倍,故而得名雙精度實型數。
2、詳細如下:
a)、Single 數據類型
Single(單精度浮點型)變數存儲為 IEEE 32 位(4 個位元組)浮點數值的形式,它的范圍在負數的時候是從 -3.402823E38 到 -1.401298E-45,而在正數的時候是從 1.401298E-45 到 3.402823E38。
b)、Double 數據類型
Double(雙精度浮點型)變數存儲為 IEEE 64 位(8 個位元組)浮點數值的形式,它的范圍在負數的時候是從 -1.79769313486232E308 到 -4.94065645841247E-324,而正數的時候是從 4.94065645841247E-324 到 1.79769313486232E308。
H. C語言雙精度數字
雙精度浮點數(Double)用來表示帶有小數部分的實數,一般用於科學計算,用8個位元組(64位)存儲空間,其數值范圍為1.7E-308~1.7E+308,雙精度浮點數最多有15或16位十進制有效數字,雙精度浮點數的指數用「D」或「d」表示。
雙精度浮點數科學記數法格式 :±aD±c或±ad±c
復制於網路
I. 單精度和雙精度
單精度和雙精度數值類型最早出現在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。
J. C語言中整型,字元型,浮點型,和雙精度浮點型,詳解
整型,計算機中的一個基本的專業術語,指沒有小數部分的數據。整型可以用十進制,十六進制或八進制符號指定,前面可以加上可選的符號(- 或者 +)。包括整型常量和整型變數,整型變數又包括短整型、基本整型、長整型,它們都分為有符號和無符號兩種版本,是一種智能的計算方式。
字元型量包括字元常量和字元變數。字元串常量由一對雙引號括起的字元序列。字元變數的取值是字元常量,即單個字元。字元變數的類型說明符是char。字元變數類型說明的格式和書寫規則都與整型變數相同。
浮點型利用指數使小數點的位置可以根據需要而上下浮動,從而可以靈活地表達更大范圍的實數。
雙精度浮點型,此數據類型與單精度數據類型(float)相似,但精確度比float高,編譯時所佔的內存空間依不同的編譯器而有所不同,是double float數據類型,C/C++中表示實型變數的一種變數類型。
(10)雙精度存儲格式代碼擴展閱讀
雙精度浮點型類型數值可轉換到其他類型的整數或浮點數,反之亦然。雙精度浮點型常量的最後一個字元可加上「d」或「D」。其存儲格式與浮點型類似,最高位為符號位,次高11位為指數位,其次52位為尾數。
雙精度型就是雙精度浮點型,同數值型比,它能提供更高的數值精度,採用固定存儲長度的浮點數形式,每個雙精度浮點型數據佔8個位元組。與數值型數據不同,它的小數點位置是由輸入的數據值來決定的,並且只能用於表中的欄位。