![](/img/trans.png)
[英]Converting single-precision floating point numbers to double-precision for division
[英]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
盡管y
和z
都等於x
除以二,但它們最終會得到不同的值。 這是因為用於計算y
的除法是作為double / double
完成的,而z
是作為int / int
計算的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.