社区
数据结构与算法
帖子详情
C里面浮点数和整数怎么比较?
Lawrence444
2002-05-03 10:57:38
C里面,大家都知道浮点数不能直接用==和整数比较,我现在一般用的是floor(x+0.0005)和整数比较,总是觉得精度很低,不知道大家有没有更好的方法。
...全文
5361
13
打赏
收藏
C里面浮点数和整数怎么比较?
C里面,大家都知道浮点数不能直接用==和整数比较,我现在一般用的是floor(x+0.0005)和整数比较,总是觉得精度很低,不知道大家有没有更好的方法。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
born_in70s
2002-05-09
打赏
举报
回复
这个问题其实很简单,如 xiaofeiwdh(小飞) 的方法,只要用
if (fabs(a-c) < epslon)
...
其中epslon 是用户给的允许误差范围。
因为如果 floor(a+0.0005) 可行的话,也就是说Lawrence444(胖子)
的机器上浮点运算结果误差范围 < 0.0005。而floor(a+0.00001) 之所以
不行,是因为机器的实际误差范围超过了0.00001。
显然判断 if (fabs(a-c) < epslon), epslon = 0.0005 会给出同样
的结果。
而如果用Lawrence444(胖子)的方法,会得出 1.501 * 230 (345.23附近)
等于345的结论, 这样的精度损失显然是不合理的。
但 if (fabs(a-c) < epslon), epslon = 0.0005 能给出正确的结论。
rty
2002-05-09
打赏
举报
回复
我的意思是假设比较15.3与16或15.3与15
先让两数同乘以10得153与160或153与150
然后再进行比较.
若还有小数,可进行取整或强制类型转换后再比较!
jaidy
2002-05-08
打赏
举报
回复
类型转换
alonejilin
2002-05-08
打赏
举报
回复
直接用类型转换是最简单的方法。
Lawrence444
2002-05-08
打赏
举报
回复
比较大的问题就是,如果浮点数在比较之前经过乘法等操作,比较的结果就会失准。比如,我把一个浮点数1.5*230拿去和345比较,就有可能达不到很高的精度了。
用这个
if(fabs(a-c) < 0.00000001) return(1); /* equal */
就不行
一定要用floor(a+0.0005),写成floor(a+0.00001)都不行。
我用调试器,发现1.5*230=344.999987......
rty
2002-05-08
打赏
举报
回复
可不可以现乘10,然后再强制类型转换比较
xiaofeiwdh
2002-05-08
打赏
举报
回复
首先将整数转换为浮点数
可以用牵制类型转换或赋值给一double变量
其次两浮点数相减
最后差值取绝对值,检查差值与要求精度差距
例:
int equ_dou_int(double a, int b)
{
if(fabs(a-c) < 0.00000001) return(1); /* equal */
return(0);
}
xotongliu
2002-05-05
打赏
举报
回复
(float) !!!!!
ffans
2002-05-04
打赏
举报
回复
在比较之前,将整数乘以1。0,在比较就行,这样既不改变整数的类型,又可以比较。
晨星
2002-05-03
打赏
举报
回复
同上。
wudi_1982
2002-05-03
打赏
举报
回复
直接用类型强制转换就可以了,
born_in70s
2002-05-03
打赏
举报
回复
IEEE 754 标准的float类型含23个尾数位,精度达到 1/2^23, 或0.000001.
在C里即使直接比较也比你的算法精度高啊。
tanjiaqi
2002-05-03
打赏
举报
回复
可以用类型转换
然后比较
用c语言求一个
整数
的阶乘
标题中的“用C语言求一个
整数
的阶乘”指的是编写一个C语言程序来计算输入
整数
的阶乘。阶乘是一个数学概念,对于非负
整数
n,n的阶乘表示为n!,它等于所有小于及等于n的正
整数
的乘积,即1 * 2 * 3 * ... * n。描述中的...
10进制与16进制
浮点数
转换
2. **10进制到16进制的转换**:将10进制的
浮点数
转换为16进制,首先需要将
整数
部分和小数部分分别转换。
整数
部分可以直接转换,小数部分通常通过乘以16的幂次并将结果取整来完成。指数部分也需要转换,通常使用移位...
c语言的自测练习
7. **
浮点数
运算**:在C语言中,
浮点数
的运算可能会有精度损失,`y=x+3/2`在C语言中会进行
整数
除法,结果是1,但因为`x`是`double`类型,所以结果会被转换为`double`并赋值给`y`。 8. **复合赋值运算符和递增运算符...
C primer plus 第二章作业 作业2-1.c
C primer plus 第二章作业 2.1 编写一个程序,调用printf()函数在一行上输出您的名和姓,再调用一次printf()函数在两个单独的行上输出您的名和姓,然后调用一对printf()函数在一行上输出您的名和姓。输出应如下所示...
14. printf 函数.pdf
- %g:6个有效数字的
浮点数
,
整数
部分一旦超过6位,就会自动转为科学计数法。 - %G:等同于%g,唯一的区别是指数部分的字母为大写。 - %hd:十进制short int类型。 - %ho:八进制short int类型。 - %hx:十六进制...
数据结构与算法
33,029
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章