社区
数据结构与算法
帖子详情
C里面浮点数和整数怎么比较?
Lawrence444
2002-05-03 10:57:38
C里面,大家都知道浮点数不能直接用==和整数比较,我现在一般用的是floor(x+0.0005)和整数比较,总是觉得精度很低,不知道大家有没有更好的方法。
...全文
5520
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语言
浮点数
和
整数
进行
比较
大小,如何
比较
浮点数
和
整数
我感到惊讶的是,每个人都跳出来认为问题在于浮点
比较
。你们应该先看一看完整的问题/代码,然后才能得出结论并迅速回答。在我们回到正题上来。我不想解释浮点
比较
的问题。我不是在看嵌套的while循环。我将考虑到这样一个事实,即当计算结果为
整数
时,作者需要打破循环。在猫鼬,当“c”是
整数
时,您希望循环中断。但你的情况是“int(c)!=c“并不像你想的那样经常检查。1这将在进入循环时进行检查。届时,“c”的...
c语言
浮点数
和整形
比较
大小,c – 查找浮点类型可以处理的最大
整数
大小而不会丢失精度...
只是一个小谓词:#include template struct can_fit{static const bool value = std::numeric_limits::digits<= std::numeric_limits::digits;};#include int main(void){std::cout << std::boolalpha;std::cout &l...
shell中
整数
的
比较
为了测试在shell编程中,对
整数
类型的
比较
,特意写了如下的测试代码:#!/bin/sh #shell中对变量的值添加单引号,爽引号和不添加的区别,对类型来说是无关的,主要是单引号不 #对相关量进行替换,如$解释成变量引用用值替代,双引号则进行替代 A="$1" B="$2" echo "输入的原始值:A=$A,B=$B" #下面的
比较
只能用于
整数
格式的
比较
(不能是小数),否则出现 #integer expression expected的错误 echo "shell
☀️光天化日学C语言☀️(25)-
浮点数
的精度问题 |
浮点数
判等千万不要写成 a == b
浮点数
判等千万不要写成 a == b
Lua和C++中的
浮点数
的
比较
在Lua 5.2以及以前的的版本中,所有的数值都采用double-precision floating-point来表示,也就是64位bit来表示
整数
或数,由表1,用来表示双精度
浮点数
的小数部分有52个bit, 根据问题4的结论,Lua的双精度
浮点数
可以连续准确表示的
整数
范围是。第三行的左侧由于会提升到
浮点数
,但是由于9007199254740993在
浮点数
中没有精确表示,只能近似表示为9007199254740992, 而右侧是整型,可以精确表示,所以第三行输出为。也是能被
浮点数
精确表示。
数据结构与算法
33,025
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章