如果我写:
int x = /* any non-zero integer value */;
float y = x;
float z = y / y;
z
是否保证正好是1.f?
答案 0 :(得分:92)
如果您的C ++实现使用IEEE754,那么是的,这是有保证的。 (除法运算符需要返回最佳浮点值)。
y / y
的{em>仅例外情况,1f
y
NaN
+Inf
},-Inf
,0f
和-0f
,或者如果您位于int
如此宽的平台上,以至于{{1}的某些实例无法表示没有将float
设置为float
或+Inf
1 。抛开最后一点,在你的情况下,这意味着-Inf
将产生唯一的例外。
IEEE754非常常见。但要检查确定,请测试
的值int x = 0;
1 例如,具有128位std::numeric_limits<float>::is_iec559;
和IEEE754 32位int
的平台将对float
的某些值表现出这种行为。
答案 1 :(得分:31)
不,并非在所有情况下,即使是IEEE754。
例如,使用df['Age'] = pd.cut(df['Age'], [0,6,12,16,65,90] ,labels=['0-6','6-12','12-16','16-65','65-90'])
,您将获得NaN。 (Live)