兩種浮點數據類型--float和double,是為了與ANSI/IEEE Std 754-1985(它是一種用於二進制浮點算術的IEEE標准)相一致而定義的.
float值由24位有符號尾數和一個8位有符號指數組成。精度大於為小數點後7位。值的范圍是從
-3.402823*1038到3.402823*1038 大於0的最小float值是1.401298*10-45這三個值分別對應的是
float.MinValue,float.MaxValue,float.Epsilon.
double值由53位有符號尾數和11位有符號指數組成,精度大約為小數點後15位到16位。值的范圍從
-1.79769313486232*10308到1.79769313486232*10308.大於0的最小double值是:4.94065645841247*10-324分別對應:
double.MinValue,double.MaxValue,double.Epsilon.
下面的代碼使一個浮點數除以0;
float f1=1;
float f2=0;
float f3=f1/f2;
看到上面的代碼,你是否會立馬想到DividedByZeroException。如果這些數是整數的話,的確會拋出異常,但是這些數是浮點數,這裡不會產生異常,
事實上,浮點數運算從來不會產生異常,因為f2並不是真正意義上的0,它只是一個與0非常接近的數(具體可以看我上篇文章)。在這種情況下f3等於一個特殊的值。它是Infinity(正無窮大),
如果將f1更改為-1,那麼f3的符號將是負的,它是-Infinity(負無窮大)。
你甚至可以對Infinity執行算術運算,例如,表達式1/f3等於0。
如果將f1更改為0,那麼f3將等於NaN(Not a Number,未知數).
判斷一個數是Infinity或者是NaN使用的是Single的靜態方法:
bool IsInfinity(float fValue); //判斷是否為無窮大
bool IsPositiveInfinity(float fValue); //判斷是否為正無窮大
bool IsNegativeInfinty(float fValue); //判斷是否為負無窮大
bool IsNaN(float fValue); //判斷是否為NaN
Single結構還定義了一些常量字段。
Single.PositiveInfinity.
Single.NegativeInfinity.
Single.NaN.