Zol*_*nda 29 c++ floating-point std
我正在研究不同的内存块操作函数,在基准测试中我注意到,我的实现IsEqualRange(double* begin1, double* end1, double* begin2, double* end2)速度比std::equals(...)MSVC和GCC 快得多.进一步的调查表明,双打和浮标不是比较的memcmp,而是一个接一个的for循环.
在哪种情况下,浮点数的二进制比较会导致错误的结果?什么时候可以二进制比较(相等)浮点数/双打数组?我不应该使用其他基本类型memcmp吗?
Bat*_*eba 50
如果我是你,我会做的第一件事就是检查你的优化设置.
可以memcmp用于浮点数组,但请注意,您可以逐个元素获得不同的结果==.特别是对于IEEE754浮点:
+0.0定义为比较等于-0.0.
定义NaN比较不等于NaN.
Mat*_*her 14
主要问题是nan价值观,因为它们永远不会与自己相等.还有两个0(+0和-0)的表示相等但不是二进制相等.
严格来说,你不能使用memcmp它们,因为答案在数学上是不正确的.
如果您知道自己没有nan或0有价值,那么您可以使用memcmp.
| 归档时间: |
|
| 查看次数: |
2693 次 |
| 最近记录: |