有符号零和无符号零 c++ 之间的排序
Sorting between signed and unsigned zeros c++
我必须能够对我在大学使用 C++ 完成的作业对负零和负零进行排序,有人可以告诉我为什么以下代码确实会产生负零吗? 我被困住了,我不确定为什么这有效...
cout << "Enter the number of elements you want to add to the vector:n";
cin >> x;
cout << "Enter the integers: n" << endl;
for (int i = 0; i < x; i++)
{
cin >> y;
y = y - 0.0;
cout << y;
Array.push_back(y);
}
如果在对上述向量进行排序时有更好的方法来产生负零,请告知。非常感谢!
首先,标准C++中不需要有任何负零,所以我假设你说的是 IEEE-754 的负零,这是大多数(我从未遇到过例外(C++实现基于他们的浮点数学。
在这种情况下,表达式
y = y - 0.0;
只有在该分配之前y == -0.0
或将舍入模式设置为"舍入到 -finity">(通常不会(时,才会产生-0.0
。
要实际生成具有值 -0.0
的double
,您只需分配所需的值:
double d = -0.0;
现在d == -0.0
IEEE 浮点数学。
然而,作为
比较应忽略零符号
(IEEE 754-1985, 5.7.比较(,-0.0 < 0.0
会产生false
,所以如果你真的想在正零之前对负零进行排序,你需要编写自己的比较器,可能使用 std::signbit
。
附录:相关标准报价:
当两个操作数之和具有相反符号(或两个的差值(时 带有类似符号的操作数(正好为零,该和(或差(的符号 在所有舍入模式下应为 +,但向 –无穷大舍入除外,其中 该符号的模式应为 –。
IEEE 754-1985, 6.3 (符号位(
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 构造函数和转换运算符之间的重载解析
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数