社区
C语言
帖子详情
float、double类型如何判断输入的数字是正数还是负数呀
xyj200588
2007-01-10 04:43:26
float、double类型如何判断输入的数字是正数还是负数呀!请高手指教
...全文
8011
17
打赏
收藏
float、double类型如何判断输入的数字是正数还是负数呀
float、double类型如何判断输入的数字是正数还是负数呀!请高手指教
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Horsetail
2007-01-20
打赏
举报
回复
类型的最高位表示的是正负!
fallinleave
2007-01-20
打赏
举报
回复
直接<0就行,哪那么多费事
iambic
2007-01-20
打赏
举报
回复
我都是直接和0比较……
zhiguo_he
2007-01-20
打赏
举报
回复
检查符号位
Findback
2007-01-14
打赏
举报
回复
float f;
if(f & 0x80000000)
{
负
}
else
{
正
}
eidewood
2007-01-10
打赏
举报
回复
拿float做例子, 一个4BYTE里面,float分位4个部分, 整型部分, 浮点部分,还有符号和级数部分, 符号部分如果是0,那么就是正数,1就是负数,顾名思义,其他部分是储存相对应的数。
晨星
2007-01-10
打赏
举报
回复
不是吧。
仅判断正负的话,用“>0”“<0”足矣。
“==”有精度问题,难道>,<也有精度问题?
「已注销」
2007-01-10
打赏
举报
回复
上面有些地方写错拉....有些地方0.000001多打了0...
「已注销」
2007-01-10
打赏
举报
回复
比如你的程序要判断一个float型的数是大于还是小于0,就不能用>0或<0来比较,因此我给定一个精度0.000001(就是1E-7)和-0.0000001(就是-1E-7),而且这两个数刚好是7个有效位(float数有效数的位数为7位),因此可以用来与float数比较!float>=0.0000001时,就算是正的,如果float<=-0.000001,就是一个负的了
xyj200588
2007-01-10
打赏
举报
回复
好的,谢谢我先用INT做一个了
「已注销」
2007-01-10
打赏
举报
回复
这样理解-EPSINON和EPSINON分别代表的是小于和大于0的浮点数,由于不能用==0.0这样的方法来看一个浮点数是否为0,所以只要用逼近的方法来判断,也就是说-EPSINON和EPSINON是在某个阶下不断逼近0的数,浮点数的判断比较麻烦,建议先看看相关知识,包括浮点数精度表示法啊什么的!
xyj200588
2007-01-10
打赏
举报
回复
iloveyy1112() 能不能具体到一个例子上面呀
如果x=10
-EPSINON代表大于0的数 EPSINON代表什么?为什么还要用&&这个应该怎么样来比较呀
if ((x>=-EPSINON) && (x<=EPSINON))
cluber2001
2007-01-10
打赏
举报
回复
设一个绝对值很小数进行比较,浮点数不能与0相比较
「已注销」
2007-01-10
打赏
举报
回复
不可将浮点变量用“==”或“!=”与任何数字比较。千万要留意,无论是float 还是double 类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。假设浮点变量的名字为x,应当将
if (x == 0.0) // 隐含错误的比较
转化为
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON 是允许的误差(即精度)。
你先看明白这个
xyj200588
2007-01-10
打赏
举报
回复
楼上的这个用法我还是有些不明白,能不能举个例子呀!我是初学者,谢谢
凌殿Y_ST
2007-01-10
打赏
举报
回复
正数: a >= 1E-7
负数: a <= -1E-7
精度表示法
「已注销」
2007-01-10
打赏
举报
回复
float和double的数请用精度来比较,否则不行
float
和
double类型
介绍
写在前面: 在实习公司写了一个传感器的驱动程序,但是传感器数据会出现异常值,把计算传感器数据的参数由整形定义为
double类型
后异常值不再出现。后来定位出错原因,用整形计算时中间计算变量溢出,解决方法是中间计算变量在计算时强制类型转换为范围合适的整形。 用
double类型
之所以不会出错,是因为
double类型
计算时都自动转为
double类型
了,
double类型
表示范围大,不存在溢出...
C语言数据类型——
float
vs double
类型有更高的位数来表示指数和尾数,因此它可以提供比。c、通过解释这些位,我们可以得到。类型更高的精度和更大的数值范围。b、解释double位模式。a、解释
float
位模式。
float
与double的范围和精度
float
和double的区别 double是双精度浮点数,内存占8个字节,有效
数字
16位,表示范围是-1.79E+ 308~-1.79E+308。
float
是单精度浮点数,内存占4个字节,有效
数字
8位,表示范围是 -3.40E+38~3.40E+38。 两者处理速度不同,CPU处理
float
的速度比处理double快。double的精度高,double消耗内存是
float
的两倍。 如果不声明,小数默认是
double类型
,用
float
时需要进行强转,或者在小数后加上f。
float
与double的范围
C/C++中
float
、
double类型
数据正负的
判断
因为
float
和double都有精度限制,所以
判断
该类型数据的正负时,不能使用“< 0.0” 或 “> 0.0” 来
判断
,而是要使用EPISON = 1e-7设置精度边界。
深入理解浮点数类型
float
和double
浮点数的表示浮点数格式首先看一下64位机器中的浮点数
float
和double格式:浮点数位表示有三个字段,分别对这些值进行编码:符号位s,阶码字段exp和小
数字
段frac。单精度
float
浮点格式中,s、exp和frac分别为1,8和23位,得到一个32位的表示;双精度double浮点格式中,s、exp和frac分别为1,11和52位,得到一个64位的表示。编码知道了浮点数的位表示,那如何对数值进行
C语言
70,037
社区成员
243,243
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章