面對金融和數學程式經常使用浮點數。
float、double、long double
數學中有一般記數法、科學記數法、指數記數法(e記數法)
指數記數法是計算機中的寫法。
(有效位數代表了精度,指數代表了可表示數的範圍)
c99標準新增了一種新的浮點型常量格式——用十六進製制表示浮點型常量。即在十六進製制數前加上十六進製制字首(0x或0x),用p和p分別代替e和e,用2的冪代替10的冪(即,p計數法)。如0xa.1fp10,即(10+1/16+15/256)*1024 =10364.0
32位(符號位)(指數部分)(非指數部分/尾數/有效位)
1+(1+7)+23
至少6位有效數字(2^23=8388608)
3.4e-38,3.4e+38
64位(符號位)(指數部分)(非指數部分/尾數/有效位)
1+(1+10)+52
至少13位有效數字(2^52=4503599627370496)
1.7e-308,1.7e+308
(可能)表示更大的浮點數,c只保證long double型別至少與double型別的精度相同
1+(1+14)+112
1.1e-4932,1.1e+4932
常用指數記數法。
型別儲存大小(位元組)
值範圍精度
float
43.4e-38,3.4e+38
6位double
81.7e-308,1.7e+308
15位long double
161.1e-4932,1.1e+4932
19位含義:計算導致數字過大,超過當前型別能表達的範圍。
處理:c會給結果賦乙個表示無窮大的特定值,而且printf()顯示該值為inf或infinity或者具有無窮含義的其他內容。
含義:計算導致數字過小,超過當前型別能表達的範圍。
處理:可以得到結果,但是損失了原末尾有效位上的數字。(損失了型別全精度的浮點值稱為低於正常的浮點值)
含義:not a number的縮寫。輸入了超過定義範圍的值導致的結果無意義。
處理:函式將返回nan值,printf()函式可將其顯示為nan、nan或其他類似的內容。
例如:-20.3轉為二進位制
整數部分20 ->10100
小數部分0.3
0.3*2 = 0.6 (0)
0.6*2 = 1.2 (1)
0.2*2 = 0.4 (0)
0.4*2 = 0.8 (0)
0.8*2 = 1.6 (1)
所以為10100.010011…1001迴圈
左移4位為1.010 0110 0110 0110 0110 0110(因為首位必為1,可以省略)
所以尾數為010 0110 0110 0110 0110 0110
最終指數字:2^(8-1)-1 + 4 =131 ->1000 0011
最終二進位制為1 1000 0011 010 0110 0110 0110 0110 0110
1 1000 0011 010 0001 0000 0000 0000 0000
首位1,負數
指數字1000 0011 = 131,131-127 = 4,左移了4位。
尾數字010 0001 0000 0000 0000 0000
則1.010 0001 0000 0000 0000 0000
右移4位
10100.001 0000 0000 0000 0000
轉換:10100 -> 20
0 * 2^(-1) + 0 * 2^(-2) + 1 * 2^(-3) = 0.125
所以浮點數為20.125
先轉換為二進位制,再轉為十六進製制
python 資料型別 整數 浮點數
浮點數 type 1.34 整形 type 10 字元行轉整形 type int 123 整形轉字元 type str 1231 整形轉浮點 float 123 123.0 浮點轉整形 丟失精度 int 123.4354353 123列印 轉義字元 可以轉義很多字元,比如 n表示換行,t表示製表符,...
JAVA 中的浮點資料型別
講下float型別 float型別是32位的,16位的尾數,16位的階碼 如果使用a表示尾數,b表示階碼,則尾數和階碼就可以組成 a 2 b 範圍的浮點數,下面是示例 long lg 10l int x lg wa 編譯錯誤 float f lg ac float的精度比long還高 system....
python 資料型別 整數型別與浮點資料型別
如何把乙個資料轉換為整數資料型別 int 資料 如何把乙個資料轉換為浮點數資料型別 float 資料 類似於以下的這些資料是整數 1 3 7 66 類似於以下資料,是浮點數,浮點數就是小數 1.2 1.73 3.14 1.0 數字的資料型別可以進行算術運算 3 與 3 這兩個資料是不一樣的 3 是整...