看到論壇上有人問「精確判斷乙個浮點數是否等於0,不要用if(data<1e-10)類似的做法。」。其實我們了解下計算機中是怎樣儲存浮點數的,這個問題的答案就很明了了。
ieee754標準中,單精度浮點數(4byte)表示法:1bit符號位(s),8bit指數字(e,用階碼表示),23bit小數部分(尾數m)。雙精度浮點數(8byte)表示法:1bit符號位,11bit指數字(用階碼表示),52bit小數部分(尾數)。所以乙個規格化的單精度浮點數x的真值為x=((-1)^s)*(1.m)*(2^(e-127));顯然,x永遠也不可能為絕對0。
針對上面的描述,當階碼e為全0且尾數m也全0時,可以認為表示的真值x為計算機中的絕對0值,再結合符號位s,有正0和負0之分;即32bit中除了最高1bit外,其餘31bit全為0時,就是計算機中的絕對0值。
float f=pow((float)2,(float)-127);;
int *ptrtoint=(int*)(void*)&f;
if(!(*ptrtoint&(0x7fffffff)))
對於計算機中32bit表示的浮點數,表示的術的絕對值的範圍約為(1e-38)~(1e+38),即2^(-127)~1.11111111b*(2^128),浮點數的絕對值再怎麼小,也不可能小過2^(-127),浮點數中不存在絕對0,所以我們只能取近似值。
浮點數判斷是否為0
浮點數因為儲存形式的原因不能直接和0值比較,當要判斷乙個浮點數是否等於0時 fabs x 1e 6 就是認為是0了 float,double分別遵循r32 24,r64 53的標準。所以float的精度誤差在1e 6 double精度誤差在1e 15 所以要判斷乙個單精度浮點數 則是if abs f...
JS判斷是否為數字,是否為整數,是否為浮點數
正規表示式方法 function checkrate input 下面為普通函式寫法 function baseisnotnum thenum return false function baseisnotint theint return false function baseisnotfloat...
js判斷是否為數字, 是否為整數, 是否為浮點數
正規表示式方法 筆者測試可用 function checkrate input function baseisnotnum thenum return false function baseisnotint theint return false function baseisnotfloat th...