float變量正確賦值 int為什么能是小數?
int為什么能是小數?那個 這不是真的。因為int可以 t代表小數。小數可以用浮點數或雙精度數表示。C語言中,取int()會強制將其他數據類型轉換成int,小數點后的位數不會直接四舍五入。例如:int
int為什么能是小數?
那個 這不是真的。
因為int可以 t代表小數。小數可以用浮點數或雙精度數表示。
C語言中,取int()會強制將其他數據類型轉換成int,小數點后的位數不會直接四舍五入。
例如:
int b10//將變量聲明為int類型,并初始化賦值。
printf(%f,b * 5.0);//打印為浮點數,強制10*5.0得到50.000000。
浮動a2.1314//將變量聲明為實數,并初始化賦值。
C語言程序開發中,處理浮點數應該注意哪些?
謝謝邀請我。
在C語言程序的開發中,有時浮點運算是不可避免的。遺憾的是,由于計算機的精度有限,C語言程序并不總能準確地存儲和處理浮點數,這也是很多C語言程序盡量使用整數運算而不是浮點運算的原因之一。
計算機存儲浮點數的不同于存儲整數的。當談到長浮點數時,它可以 不能存放在無限的空間里,是嗎?事實上,浮點數在計算機中的存儲是有一些國際標準的。這個可以參考我之前的文章。
鑒于C語言程序并不總是能準確表示浮點數,我們在編寫程序時需要牢記這一特性,否則C語言程序最終可能會產生無法理解的結果。本文將以問答的形式探討C語言程序開發中浮點運算的基本注意事項。
float變量定義為3.1,為什么printf打印的是3.099999?情況并非總是如此。很多計算機用二進制表示整數,用二進制表示浮點數。我們人類經常用十進制來表示數字。不幸的是,可以用十進制精確表示的數字可能無法用二進制精確表示。
例如,在十進制系統中,分數1/3 0.33333…無數個3 s和小數可以 不能準確地表示這個數字。同理,0.1,也就是1/10,可以 t無法用二進制(0.0001100110011…)精確表示,所以在這種情況下,3.1可以 t無法精確表達,只能用3.0999999來近似。
使用printf()函數打印3.1,最終顯示到終端的結果主要取決于使用的計算機中二進制/十進制轉換的程度。事實上,有時當我們將一個精確的十進制浮點數轉換成二進制數,然后再轉換回十進制數時,我們會發現這兩個數并不是 "平等 "。
為什么可以 t sqrt(144。)得到正確的結果?
小明想用C語言中數學庫的sqrt()函數計算144的平方根,所以寫了下面的C語言代碼,請看:
但是小明編的這個C語言。說出代碼并執行后,發現程序輸出是一串雜七雜八的數字。這是怎么回事?
仔細觀察小明 s C語言代碼顯示,盡管他調用了數學庫中的函數,但他沒有包含相應的頭文件 "math.h ",導致C語言編譯器無法確定sqrt()函數的原型。此時,編譯器不得不 "猜測 "sqrt()的函數原型為:
也就是編譯器認為sqrt()函數的返回值是整數。如果讀者讀了我之前的文章,應該明白計算機存儲整數和浮點數的不同,所以C語言程序通過存儲浮點數來解釋整數時可能出現意外結果是很自然的。
如果C語言編譯器在處理函數時沒有找到它的原型,一般會把int f()作為函數的原型。
如何判斷兩個浮點數是否相等?計算機可以 t精確表示浮點數,這也影響C語言程序判斷兩個浮點數是否相等。如果讀者讀過我以前的文章,應該很清楚,運營商可以 t在C語言程序中用來判斷兩個浮點數是否相等。
事實上,由于C語言程序不能總是準確地表示浮點數,所以當需要判斷兩個浮點數是否 "平等 ",通常的做法是判斷兩個數是否 "關閉 "夠了:
其中epsilon是一個非常小的整數,上面的表達式使得浮點數A和B足夠接近,可以近似為 "平等 "。雖然ε在浮點數表示的范圍內應該足夠小,但在實際開發中,只要能滿足精度的實際需要, "適可而止。 "所以ε也可以是程序員自己設定的一個閾值。
如何賦一些特殊值,比如NaN(不是數,不是數)?很多平臺都提供了方便處理浮點值的工具或函數,比如像isnan()這樣的一些預定義的常量和函數。這些工具要么是ltmath.hgt中的標準擴展,要么是ltieee.hgt或ltnan.hgt的非標準擴展。
一般來說,如果一個數不等于自己,那么它一定是楠:
然而,應該注意,C語言編譯器可以優化這種比較代碼,以便符合IEEE。還要注意,即使像NaN這樣的特殊號碼在系統中預定義,我們也可以 不要和其他數字比較。例如,if(xNaN)是一個不合適的代碼,因為NaN可以 不要和數字相比。
如果開發C語言程序的平臺沒有像NaN那樣直接提供特殊數字,我們可以自己定義,比如:
但是,應該明白,有些編譯器會把上面兩行C語言代碼當作 "浮點異常 ",而此時我們將無法獲得nan和inf。
對于nAN和inf,另外需要明確的是sprintf()函數的格式輸出。在某些平臺上,它可以生成類似于 "南 "和 "inf "。
小結本節主要介紹C語言程序開發中處理浮點數時應該注意的事項。因為計算機可以 不要總是精確地存儲浮點數,處理浮點數和處理整數是有區別的。如果你不 我不知道這些,它 編寫有問題的代碼很容易。我強烈推薦你在這里閱讀我以前的文章。