浮动数与0比较

无限大小

  C语言如何表示无限大小,NAN?redis里面这么搞的:

static double R_Zero, R_PosInf, R_NegInf, R_Nan;

/* Double constants initialization */

R_Zero = 0.0;

R_PosInf = 1.0/R_Zero;

R_NegInf = -1.0/R_Zero;

R_Nan = R_Zero/R_Zero;

  简单测试:

#include <stdio.h>

int main()

{

static double R_Zero, R_PosInf, R_NegInf, R_Nan;

/* Double constants initialization */

R_Zero = 0.0;

R_PosInf = 1.0/R_Zero;

R_NegInf = -1.0/R_Zero;

R_Nan = R_Zero/R_Zero;

printf("R_Zero  : %lf\n"

"R_PosInf: %lf\n"

"R_NegInf: %lf\n"

"R_Nan   : %lf\n",

R_Zero, R_PosInf, R_NegInf, R_Nan);

return 0;

}

  结果如下:

[[email protected] tmp]$ ./z

R_Zero  : 0.000000

R_PosInf: inf

R_NegInf: -inf

R_Nan   : -nan

  果然神奇。

  大学时候,老师教导我们,浮动数不要与0比较,因为浮点数在计算机里面表示的是近似值。所以如果浮动数要与0做比较就用·< 0.000001·这种龌蹉的方式,明明是0,却要搞个神马0.000001出来。现在我们可以这么来稿了:

#include <stdio.h>

int main()

{

static double R_Zero, R_PosInf, R_NegInf, R_Nan;

/* Double constants initialization */

R_Zero = 0.0;

R_PosInf = 1.0/R_Zero;

R_NegInf = -1.0/R_Zero;

R_Nan = R_Zero/R_Zero;

printf("R_Zero  : %lf\n"

"R_PosInf: %lf\n"

"R_NegInf: %lf\n"

"R_Nan   : %lf\n",

R_Zero, R_PosInf, R_NegInf, R_Nan);

double a = 1.0;

double b = 1.0;

if(a-b == R_NegInf) {

printf("%lf - %lf != 0\n", a, b);

}else{

printf("%lf - %lf == 0\n", a, b);

}

return 0;

}

  结果如下:

[[email protected] tmp]$ ./z

R_Zero  : 0.000000

R_PosInf: inf

R_NegInf: -inf

R_Nan   : -nan

1.000000 - 1.000000 == 0

以后就可以用R_NegInf这种方式和0比较了。

POST A:T http://luoguochun.cn/2014/06/28/infinite/

浮动数与0比较

时间: 2024-11-06 09:28:09

浮动数与0比较的相关文章

部分安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法

前端JS中使用XMLHttpRequest 2上传图片到服务器,PC端和大部分手机上都正常,但在少部分安卓手机上上传失败,服务器上查看图片,显示字节数为0.下面是上传图片的核心代码: HTML <input type="file" id="choose" capture="camera" accept="image/*"> JavaScript var filechooser = document.getEleme

malloc()參数为0的情况

以下的代码片段输出是什么?为什么? char *ptr; if((ptr = (char *)malloc(0))==NULL) puts("Got a null pointer"); else puts("Got a valid pointer"); 解析:......有益把0值传给了函数malloc.得到了一个合法的指针,这就是上面的代码,该代码的输出是"Got a valid pointer". 这个"解析"根本就没有解

mysql执行update语句受影响行数是0

mybatis连接mysql数据库,发现同一个update执行多次,返回的int值都是1. 我记得同样的update再次执行时 受影响行数是0. 后来发现,我之前一直用的SQLyog是这样子的. 原来,不同的连接客户端执行update给出的受影响行数不同. 对于再次返回0,网上的资料是,MySQL 为了提升性能,当它发现要执行的修改内容与数据库中完全一致时,对它而言,此时修改是毫无意义的,反而会消耗一次执行修改的性能,于是它就不再做修改,因而受影响行数就是0. 至于mybatis,网上有说myb

记数问题(0)&lt;P2013_1&gt;

记数问题 (count.cpp/c/pas) [问题描述]  试计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如,在1到11中,即在1.2.3.4.5.6.7.8.9.10.11中,数字1出现了4次. [输入] 输入文件名为count.in. 输入共1行,包含2个整数n.x,之间用一个空格隔开. [输出] 输出文件名为count.out. 输出共1行,包含一个整数,表示x出现的次数. [输入输出样例] [数据说明] 对于100%的数据,1≤n≤1,000,000,0≤x≤9

(笔试题)N!的三进制数尾部0的个数

题目: 用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有____个0. 思路: 这道题与上一篇博文N!尾部连续0的个数的思路是一样的. 计算N!下三进制结果末尾有多少个0,其实就是计算三进制中的3被连续进位多少次,只要将N!因式分解成3^m*other,m就是答案. 技巧性的解法就是:m=N/3+N/(3^2)+N/(3^3)....+N/(3^k) (k<=N/3) (三进制数:第一位满3进1,第二位满9进1,第三位满27进1...) 代码: #incl

.net 更新access数据库 影响的行数为0

在更新Access数据库的时候,明明传入的数据及参数类型都正确,但是一直更新不了,查看影响的行数一直为0 此原因为 C#操作Access数据库的时候更新的参数和条件参数要按照更新语句中的顺序进行设置,如果设置不正确,则会出现以上问题 1 update TPersonnel 2 set pname=@pname, 3 shenfhm=@shenfhm, 4 sex=@sex, 5 phone=@phone, 6 weixing=@weixing, 7 pid=@pid, 8 email=@emai

细数Android5.0到Android7.X 多媒体技术新特性

Android 5.0 行为变更 媒体播放 如果您要实现显示媒体播放状态或传输控件的通知,请考虑使用新的 Notification.MediaStyle 模板,而不是自定义 RemoteViews.RemoteView 对象.无论您选择使用哪个方法,请务必将通知的可见性设为 VISIBILITY_PUBLIC,以便可通过锁定屏幕访问您的控件.请注意,从 Android 5.0 开始,系统不再将 RemoteControlClient 对象显示在锁定屏幕上. 媒体控件和 RemoteControl

海康、大华等设备GB28181接入LiveGBS国标流媒体服务后通道数为0的问题处理

问题:NVR接入国标服务后通道显示为0 尝试操作一:更新通道 尝试操作二:NVR设备中配置[视频通道编码ID] 视频通道编码ID格式 列如按照:34020000001320000001 , 只改最后两位 具体通道号规则参考G28181协议标准:统一编码规则 原文地址:https://www.cnblogs.com/kumukim/p/11223821.html

Minimum Inversion Number 【线段数】

Problem DescriptionThe inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that satisfy i < j and ai > aj. For a given sequence of numbers a1, a2, ..., an, if we move the first m >= 0 numbers to the end of