首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Splint (C代码检查器)在比较浮点型和整型时会给出错误?

为什么Splint (C代码检查器)在比较浮点型和整型时会给出错误?
EN

Stack Overflow用户
提问于 2008-09-01 15:02:40
回答 6查看 478关注 0票数 4

这两个都是数学值,但是浮点数确实有更高的精度。这是导致误差的唯一原因吗--精度的差异?或者还有另一个潜在的(更严重的)问题?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-01 15:06:30

这是因为整数值的集合不等于'int‘和' float’类型的浮点值的集合。例如,浮点值4519245367在整数集中没有equal,而整数值4519245367可能不存在于浮点值可以存储的值集中。因此,检查器将此标记为要由程序员检查的问题。

票数 8
EN

Stack Overflow用户

发布于 2008-09-01 15:06:12

因为这可能不是个好主意。并不是所有的浮点型都可以截断为整型,也不是所有的整型都可以转换为浮点型。

票数 3
EN

Stack Overflow用户

发布于 2008-10-08 05:18:11

在进行比较时,整数值将被“提升”为浮点值。此时,您正在对两个浮点数进行精确相等的比较,这几乎总是一件坏事。

你通常应该有某种"epsilon球“,或可接受的值的范围,如果两个值彼此足够接近,则进行比较。您需要一个大致如下的函数:

代码语言:javascript
复制
int double_equals(double a, double b, double epsilon)
{
   return ( a > ( b - epsilon ) && a < ( b + epsilon ) );
}

如果您的应用程序没有明显的epsilon选择,那么使用DBL_EPSILON。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档