我正在使用不同的内存块操作功能,在基准测试期间,我注意到IsEqualRange(double* begin1, double* end1, double* begin2, double* end2)
的实现比MSVC和GCC上的std::equals(...)
快得多。进一步的研究表明, double 和浮点型不是通过memcmp
进行比较,而是在for循环中逐一进行。
在什么情况下浮点数的二进制比较会导致错误的结果?什么时候可以对浮点数/ double 数进行二进制比较(相等)数组?还有其他我不应该使用memcmp
的基本类型吗?
最佳答案
如果您是我,第一件事就是检查您的优化设置。
可以将memcmp
用于浮点数组,但请注意,与逐个元素的==
可获得不同的结果。特别是对于IEEE754浮点:
关于c++ - 浮点数的二进制相等比较正确吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54020760/