c++ - float 和整数之间的不等式比较

标签 c++

在 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/

相关文章:

c++ - 如何使用下标运算符中分配的值来做一些事情?

C++ OpenGL 照明只照亮某些墙壁

c++ - 为什么不能在实例化派生类指针的同时实例化对基类的引用?

c# - 在 C++Builder 应用程序中动态加载 C# .NET 程序集

c++ - 在 qt creator 中单步执行调试器导致 gdb 在几秒钟后崩溃

c++ - Visual C++ 检测右键单击按钮

c++ - 如何生成 64 位 COM 代理

c++ - C++ 的线程安全 vector 类

c++ - 将 std::vector<char> 解释为 std::vector<short>

c++ - 基于 OpenCV DFT 的卷积被移位