我正在使用不同的内存块操作功能,在基准测试期间,我注意到IsEqualRange(double* begin1, double* end1, double* begin2, double* end2)的实现比MSVC和GCC上的std::equals(...)快得多。进一步的研究表明, double 和浮点型不是通过memcmp进行比较,而是在for循环中逐一进行。

在什么情况下浮点数的二进制比较会导致错误的结果?什么时候可以对浮点数/ double 数进行二进制比较(相等)数组?还有其他我不应该使用memcmp的基本类型吗?

最佳答案

如果您是我,第一件事就是检查您的优化设置。

可以将memcmp用于浮点数组,但请注意,与逐个元素的==可获得不同的结果。特别是对于IEEE754浮点:

  • +0.0被定义为等于-0.0。
  • NaN定义为与NaN比较不相等。
  • 关于c++ - 浮点数的二进制相等比较正确吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54020760/

    10-11 22:47
    查看更多