4

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

4

6 回答 6

8

这是因为整数值集不等于“int”和“float”类型的浮点值集。例如,浮点值 0.5 在整数集中不相等,整数值 4519245367 可能不存在于浮点可以存储的值集中。因此,检查器将此标记为程序员要检查的问题。

于 2008-09-01T15:06:30.377 回答
3

因为这可能不是一个好主意。并非所有浮点数都可以截断为整数;并非所有整数都可以转换为浮点数。

于 2008-09-01T15:06:11.890 回答
2

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

您通常应该有某种“epsilon 球”或可接受值的范围,并且如果两个值彼此足够接近以被视为相等,则进行比较。你需要一个大致像这样的函数:

int double_equals(double a, double b, double epsilon)
{
   return ( a > ( b - epsilon ) && a < ( b + epsilon ) );
}

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

于 2008-10-08T05:18:10.693 回答
1

因为floats不能存储精确的int值,所以如果你有两个变量int i和float f,即使你赋值“i = f;”,比较“if (i == f)”也可能不会返回真。

于 2008-09-01T15:08:17.783 回答
1

假设有符号整数和 IEEE 浮点格式,可以表示的整数的大小为:

short  -> 15 bits
float  -> 23 bits
long   -> 31 bits
double -> 52 bits

因此 a floatcan 代表 any short, a doublecan 代表 any long

于 2008-09-04T10:59:06.467 回答
0

如果您需要解决这个问题(您有正当理由并且很高兴其他答案中提到的问题对您来说都不是问题),那么只需从一种类型转换为另一种类型。

于 2008-09-01T15:14:02.120 回答