对于浮点值a:对于a的有限值,a*0.0 == 0.0是否总是求值为真?
For a floating point value a: Does a*0.0 == 0.0 always evaluate true for finite values of a?
我一直假设以下测试对于somefloat
的有限值(没有INF,没有NAN)总是成功的:
assert(somefloat*0.0==0.0);
在乘0优化中指出double a=0.0
和double a=-0.0
严格来说不是一回事。
所以我想知道这是否会导致某些平台上的问题,例如,上述测试的结果是否取决于a
是阳性还是阴性?
如果您的实现使用IEEE 754算法(大多数使用),则正负零比较起来相等。由于对于有限的a
,表达式的左边只能为正零或负零,因此断言将始终为真。
如果它使用了其他类型的算术,那么只有实现者(希望是特定于实现的文档)才能告诉您。有争议的是(参见注释),标准的措辞可以被理解为暗示它们在任何情况下都必须比较相等,并且肯定没有一个相同的实现会这样做。
-0.0 == 0.0根据双比较规则
非谓语形式的值(+负无穷,Nan) somefloat * 0.0 ! = 0.0。
你的assert
永远不会失败,只要somefloat
不会失败无穷或NaN。在不支持无穷或的系统上
相关文章:
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 堆分配对于大型块中的分页是否更有效?
- 对于多个字符(如 ETX/STX 对),是否有类似于 std::quote 的东西
- 对于C字符串,是否有一个标准的C++迭代器
- 对于存储另一个类所需信息的类,例如其构造,是否有设计模式?
- 对于这个问题,是否有更好的数据结构和算法选择
- 对于输出,std::copy是否比std::cout快
- 对于琐碎的对象,在"this"上调用新放置是否安全?
- 对于动态模板中的include,是否有一种干净的方法
- 对于std::bitset,是否有一个ffs()等价物
- 对于不同的语言,是否有任何稳定的序列化方法?
- 对于每个线程,random_device是否以不同的状态启动?
- SourceAddress 是否相对于 MmCopyVirtualMemory 中的 SourceProcess?
- 对于C++,是否有任何现代的 std::strchr() 替代品?
- 对于其他类型的void_t,是否有标准的概括
- 访问控制对于已删除的构造函数是否重要?
- 现代C++的实验特征对于长期项目是否可靠?
- 对于具有固定运行时确定大小的数组,是否有标准C++类?
- 对于每个渲染网格,我是否必须调用每个帧的GlverTexAttribPointer()