visual studio 2008 - C++ ceil and negative zero
visual studio 2008 - C++ ceil and negative zero
在VC++ 2008上,ceil(-0.5)
返回-0.0
。这是通常/预期的行为吗?避免将-0.0
打印到 I/O 流的最佳做法是什么。
C++中的ceil
来自C标准库。
C标准说,如果一个平台实现了IEEE-754算术,ceil( )
的行为就好像它的参数根据IEEE-754 roundTowardPositive 舍入属性被四舍五入为整数。 IEEE-754标准说(条款6.3):
转换结果的符号, 量化操作, 圆到积分运算,以及 roundtoIntegralExact 是 第一个或唯一的操作数。
因此,结果的符号应始终与输入的符号匹配。 对于范围为 (-1,0)
的输入,这意味着结果应该是-0.0
。
这是
正确的行为。 请参阅零值上的一元运算符-() - c++ 和 http://en.wikipedia.org/wiki/Signed_zero
我偏向于做一个static_cast<int>(ceil(-0.5));
但我不声称这是"最佳实践"。
编辑:您当然可以转换为任何合适的积分类型(uint64_t,长等)
我不能说我知道这是通常的,但至于避免打印它,实现一个检查,如下所示:
if(var == -0.0)
{
var = 0.0;
}
// continue
是的,这很常见。
int number = (int) ceil(-0.5);
数字将为 0
我明白为什么ceil(-0.5)
返回-0.0
.这是因为对于负数,ceil
返回操作数的整数部分:
double af8IntPart;
double af8FracPart = modf(-0.5, & af8IntPart);
cout << af8IntPart;
此处的输出为"-0.0"
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- Epoll zero recv() and negative(EAGAIN) send()
- epoll and negative errno value
- visual studio 2008 - C++ ceil and negative zero