- 主题:浮点数能不能和0.0f用==精确比较?
全站审核中,暂不能查看本文内容...
全站审核中,暂不能查看本文内容...
全站审核中,暂不能查看本文内容...
全站审核中,暂不能查看本文内容...
不能,目前比较好的方案是gtest里面的,转成int去比,可以看EXPECT_NEAR的实现
--
FROM 115.171.62.*
不成立的是float和实数运算的映射关系,对于实数x, y
float(x) op float(y) == float(x op y)
不恒成立。
——————
精彩的陈述。他想问的,应该就是左边的情况,比如:
float(x) - float(x) == 0.0f ?
Fx + F(-x) == 0.0f ?
Fx * (Fx - Fx) == 0.0f ?
Fx / (Fx * BigEnough) == 0.0f ?
【 在 ilovecpp 的大作中提到: 】
: 嗯。问题是似乎(这楼里)很多人把浮点数表示和运算的精度限制理解成浮点数有某种不确定性。例如
: float x = 0.3
: 然后他们以为x==0.3就不一定成立了。
: ...................
--
FROM 106.44.133.*
如果x是常量当然相等。
但如果x是运算结果,与任何数包括零在内就没有相等意义了。
所以在实际使用中,不要去和零用等号。
【 在 DoorWay 的大作中提到: 】
: 不成立的是float和实数运算的映射关系,对于实数x, y
: float(x) op float(y) == float(x op y)
: 不恒成立。
: ....................
- 来自「最水木 for iPhone13,4」
--
FROM 223.104.212.*
是的。但这是数值计算的特点。不论你用浮点数定点数,二进制十进制,只要你是数值计算而不是符号计算,都有这个问题。
把它归结到浮点数的性质而不是数值计算的性质,结果就是楼主的问题。
【 在 foliver 的大作中提到: 】
: 如果x是常量当然相等。
: 但如果x是运算结果,与任何数包括零在内就没有相等意义了。
: 所以在实际使用中,不要去和零用等号。
: ...................
--
FROM 124.78.174.*
我咋感觉你说的不对呢,四种情况都相等?
【 在 foliver 的大作中提到: 】
: 如果x是常量当然相等。
: 但如果x是运算结果,与任何数包括零在内就没有相等意义了。
: 所以在实际使用中,不要去和零用等号。
: ...................
--
FROM 36.46.13.*
这个东西其实跟现实世界也是一样的,2.0-3.0两个数都是有误差的,最后拿到的1.0不一定就是等于1的,只能说跟1.0的差别很小而已。
【 在 ilovecpp (cpp) 的大作中提到: 】
: 是的。但这是数值计算的特点。不论你用浮点数定点数,二进制十进制,只要你是数值计算而不是符号计算,都有这个问题。
: 把它归结到浮点数的性质而不是数值计算的性质,结果就是楼主的问题。
--
FROM 73.254.87.*