C#中的数学类,Math,浮点数(中)
前言
今天本来不想再写了的,一是写的挺多了,再写也记不住,而是想早点回去撸撸睡了,明天得一早起来学车,但是这个点回去睡觉有点早啊,再写最后一篇我就回去了!
正文
接着上面没有说完的内容,两周浮点数:float和double是为了ANSI/IEEE Std754-1985(这是一种用于二进制浮点算术的IEEE标准)相一致而定义的.
float值由24位有符号尾数和一个8位有符号指数组成.精度为小数点后七位.值得范围和大于0的最小float值:
float.MinValue,float.MaxValue,float.Epsilon
可以试着自己输出一下看看结果是什么.
double值由53位有符号尾数和11位有符号指数组成,精度大约是小数点后16位.值的范围和大于0的最小double值:
double.MinValue,double.MaxValue,double.Epsilon
下面的代码是一个浮点数除以0:
float f1=1;
float f2=0;
float f3=f1/f3;
看到上面的代码,你可能会瞬间想到一个异常:DividedbyZeroException.如果这些数出现在整数的话,的确会出现异常,但是!这些是浮点数,就不会产生异常.
事实上,浮点数运算从来不会产生异常,因为f2并不是真正意义上的0,它只是一个与0非常接近的数(多少来着?自己想).在这种情况下,f3等于一个特殊的值.它是Infinity(正无穷大).
如果将f1改为-1,f3的结果就是-Infinity(负无穷大).
你甚至可以对Infinity执行算术运算,例如,表达式1/f3等于0.
如果将f1更改为0,即0/Infinity,那么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.
使用C#代码输出一下看看
Console.WriteLine(Single.PositiveInfinity);
Console.WriteLine(Single.NegativeInfinity);
Console.WriteLine(Single.NaN);