日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

double float精度 float精度


double float精度 float精度



1 引言先舉個例子:
#include <stdio.h>//公眾號:c語言與cpp編程int main(){   float a = 0.1;   float b = 0.2;   float c = a + b;   if(c == 0.3){      printf("c == 0.3n");   }else{      printf("0.1 + 0.2  != 0.3n");   }   return 0;}
double float精度 float精度


c != 0.3
double float精度 float精度


【double float精度 float精度】a,b,c局部變量值
如果變量 a , b 換 0.75  ,  0.5 可以看出運行出 c == 1.25 ,說明浮點數(shù)運算是不穩(wěn)定的 。
double float精度 float精度


a=0.5,b=0.75,c == 1.25
為什么會時好時壞,因為不是所有的小數(shù)能用浮點數(shù)標準 ( IEEE 754 ) 表示出來 。
所以,判斷兩個浮點數(shù)變量是否相等,不能簡單地通過 "==" 運算符實現(xiàn),浮點數(shù)進行比較時,一般比較他們之間的差值在一定范圍之內 。
bool feq(float a,float b){ return fabs(a,b)<FLT_EPSILON;}FLT_EPSILON 數(shù)值是 1.192092896e-07F,最小的 float 型數(shù),它使 1.0+FLT_EPSILON !=1.0
2 為什么浮點數(shù)精度會丟失十進制小數(shù)轉化為二進制數(shù):乘以2直到?jīng)]有了小數(shù)為止 。
舉個例子,0.9 表示成二進制數(shù) 。
   0.9*2=1.8   取整數(shù)部分 1   0.8(1.8的小數(shù)部分)*2=1.6    取整數(shù)部分 1   0.6*2=1.2   取整數(shù)部分 1   0.2*2=0.4   取整數(shù)部分 0   0.4*2=0.8   取整數(shù)部分 0   0.8*2=1.6   取整數(shù)部分 1   0.6*2=1.2   取整數(shù)部分 0    .........        0.9二進制表示為(從上往下): 1100100100100......很顯然,小數(shù)的二進制表示有時是不可能精確的 。其實道理很簡單,十進制系統(tǒng)中能不能準確表示出 2/3 呢?同樣二進制系統(tǒng)也無法準確表示 1/10。這也就解釋了為什么浮點型精度丟失問題 。
3 float 存儲原理float 型在內存中占 4 個字節(jié) 。float 的 32 個二進制位結構如下:
float 內存存儲結構
313029—-2322—-0實數(shù)符號位指數(shù)符號位指數(shù)位有效數(shù)位
其中符號位 1 表示正,0 表示負 。有效位數(shù)位 24 位,其中一位是實數(shù)符號位 。
將一個 float 型轉化為內存存儲格式的步驟為: