在 C++ 中,以下两个比较有什么不同吗?
double x = ...;
bool cmp1 = x > 1;
bool cmp2 = x > 1.0;
对于cmp1
,文字1是否像通常的混合类型算术一样首先转换为double
? (如果是的话,能否给我指出标准中的相关定义?)
一般来说,如果我将整数文字或浮点文字比较/分配给浮点变量,这有什么关系吗?分配情况如下所示:
double x1 = 1;
double x2 = 1.0;
最佳答案
are the following two comparisons different in any way?
通常没有区别。他们是一样的。 RHS 代码变为double
,然后进行比较。
下面是 C 分析,我相信 C++ 继承了它。
当源代码值不精确为 double
(大整数)时,就会出现潜在差异。
使用x > 12345678901234567891.0
,代码将转换为double
,每个“结果是最接近的可表示值,或者是紧邻的较大或较小的可表示值”最接近的可表示值,以实现定义的方式选择。
使用 x > 12345678901234567891u
,代码将精确转换为整数常量,然后然后转换为 double
每“如果要转换的值位于可以表示但无法准确表示的值范围内,结果是最接近的较高或最接近的较低可表示值,以实现定义的方式选择。
我希望这两者都能生成相同的double
,但考虑到细微的措辞差异,并且它们都是实现定义的行为,但彼此不相关,差异可能存在。这取决于编译器的实现质量。
当然,超出 long long
范围的源代码整数是有问题的。
In general, does it matter if I compare/assign an integer literal or a floating-point literal to a floating-point variable?
一般来说,最好通过编码通用类型来进行比较。形成通用类型的路径可能会暴露微妙的转换效果。
关于c++ - float 和整数之间的不等式比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66621096/