星空网 > 软件开发 > ASP.net

关于浮点数与0相等比较方法

  C#中判断浮点数是否为0,不可以将变量同0使用“==”或“!=”进行比较,那这样在进行是否为0的时候是不是就没有办法了呢?下面展示了两个判断思路:

近似比较

  采取折中的方式,设法将直接相等比较转换为“>=”、“<=”的比较形式,达到近似的判断效果

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

  或者不使用Math函数

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

精确判断

  有的时候,近似比较已经不能满足要求,需要精确比较,那该怎么办呢?办法还是有的。 

  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值}

  这段代码需要开启unsafe标记

 




原标题:关于浮点数与0相等比较方法

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

史上最严图片政策来袭!:https://www.ikjzd.com/articles/4851
流量涨10倍,销量不涨?:https://www.ikjzd.com/articles/4854
特朗普对亚马逊穷追猛打,亚马逊市值4天蒸发约890亿美元!:https://www.ikjzd.com/articles/486
卖家如何躺着赚钱?:https://www.ikjzd.com/articles/4861
eBay英国站Shutl提供的eBay Delivery快递服务将上调UPS费率!:https://www.ikjzd.com/articles/4866
最详细的PPC实操技巧分析,看看你中枪没!:https://www.ikjzd.com/articles/4868
仿品独立站从建站、推广、收款到底怎么玩?:https://www.kjdsnews.com/a/1836312.html
仿品独立站从建站、推广、收款到底怎么玩?:https://www.goluckyvip.com/news/186215.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流