邀朋友种豆,一起分享吧
喜欢购买正品行货?那就去品牌街

C#判断浮点数是否是0值的方法

来自:种豆 时间:2017-12-29 阅读:6198次 原文链接

C#中判断浮点数是否为0,不可以将变量同0使用“==”或“!=”进行比较,应该设法转换为“>=”、“<=”的比较形式。

C#判断浮点数是否为0的错误方法

float x=0f;
if(x == 0.0){
//这是错误的判断方法
}
if(x != 0.0){
//这是错误的判断方法
}

C#判断浮点数是否为0的正确方法

public const float PRECISION = 0.000001f;
float x=0f;
if(Math.Abs(x) <= PRECISION){
//浮点数x值为0
}else{
//浮点数x值不为0

}


if(x <= PRECISION && x >= -PRECISION ){
//浮点数x值为0
}else{
//浮点数x值不为0
}

精确判断一个浮点数是否为0值的方法

看到论坛上有人问“精确判断一个浮点数是否等于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)))
{
//计算机中的绝对0值
}

精确判断一个浮点数是否为0值的方法作者:Silent Void  出处:http://happyhippy.cnblogs.com

 
关于种豆 ┊ 联系我们 ┊ 免责声明 ┊ 发帖须知 ┊ 请提意见 ┊ 站点地图
本站为个人爱好兴趣分享网站,不代表本人观点,如有侵权请联系QQ3033380280进行处理
sowsoy.com 版权所有 Copyright©2010-2021 备案号:蜀ICP备2020025376号-3
Email:sowsoy#hotmail.com