C里面浮点数和整数怎么比较?

Lawrence444 2002-05-03 10:57:38
C里面,大家都知道浮点数不能直接用==和整数比较,我现在一般用的是floor(x+0.0005)和整数比较,总是觉得精度很低,不知道大家有没有更好的方法。
...全文
5361 13 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
可以用类型转换
然后比较

33,029

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧