簡體   English   中英

什么是浮點表示中的單精度和雙精度格式

[英]What is single-precision and double-precision format in floating point representation

我是 C 編程語言的新手。 現在我正在學習浮點數據類型,其中概念說:浮點常量通常表示為 C 中的雙精度量,或者 C 的某些版本允許指定“單精度”浮點常量。

這到底是什么意思? 誰能給我舉個例子來幫助我理解這一點?

當您在代碼中的某處鍵入一個數字時,它被稱為常量 由於多種原因,這個常量需要有一個類型。 就像變量需要有類型一樣。 例子:

int x; // Obviously x is a variable/object of type: int

1234   // This is an integer constant but what is the type ???

C 標准描述了如何確定數值常量的類型。 例如,上面代碼中的 1234 將被視為int類型的整數常量。

同樣對於浮點常量。 浮點常量的類型需要有規則。 例子:

3.14  // Floating point constant of type ??

這正是問題中的文字告訴您的內容:

浮點常量在 C 中通常表示為雙精度量

所以從這個你知道

3.14 // Floating point constant of type double

這是 C(N1570 草案)標准的引述:

無后綴浮點常量的類型為 double。 如果以字母 f 或 F 為后綴,則其類型為 float。 如果以字母 l 或 L 為后綴,則它的類型為 long double。

這意味着:

3.14   // Type: double
3.14F  // Type: float
3.14L  // Type: long double

那么為什么/什么時候這很重要?

至少一個例子是算術表達式。 進行計算時,操作數的類型必須相同。 如果它們與開始時不同,則會進行轉換,以便在計算完成之前操作數具有相同的類型。 例子:

int x = 42;
double y = 3.14 * x;

所以這里x (它是一個int )將被轉換為一個 double 因為常量3.14是一個 double。 一旦x被轉換,乘法將以double * double的形式完成,並給出一個 double 作為結果。

請注意,上面的代碼將結果保存為雙精度與乘法部分無關。 如果你這樣做:

int x = 42;
float y = 3.14 * x;

乘法也是如此,即乘法仍將作為double * double完成,乘法的結果仍然是 double。 然后將生成的 double 分配給 float,這涉及從 double 到 float 的轉換。 但是請注意,在將結果從 double 轉換為 float 的過程中,可能會丟失一些精度,因此兩個示例中的y值可能會略有不同。

在這里結束這篇文章是一些代碼,它產生了巨大的差異。

int x = 5;
double y = x / 2.0;          // Floating point constant of type double
double z = x / 2;            // Integer constant of type int
printf("y=%f z=%f\n", y, z);

Output:

y=2.500000 z=2.000000

盡管yz都等於x除以二,但它們最終會得到不同的值。 這是因為用於計算y的除法是作為double / double完成的,而z是作為int / int計算的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM