c++ - 当 n 为 0 时除法 z/(x/n)

标签 c++

我有一个算术表达式,例如:

float z = 8.0
float x = 3.0;
float n = 0;
cout << z / (x/n) + 1 << endl;

为什么我得到的正常答案等于 1,而它应该是“nan”、“1.#inf”等?

最佳答案

我假设您正在使用浮点运算(尽管不能确定,因为您没有告诉我们)。

IEEE754 浮点语义在扩展的实数线上工作,并在两端包括无穷大。这使得非零分子的除法对于 any(非 NaN)分母定义明确,“符合”(即连续扩展)通常的算术规则:x/n 是无穷大,z 除以无穷大为零——就像您将表达式简化为 n * z/x 一样。

唯一真正未定义的量是 0/0 和 inf/inf,它们由特殊值 NaN 表示。

关于c++ - 当 n 为 0 时除法 z/(x/n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19197305/

相关文章:

c++ - 为什么 vector 初始化构造和复制?

c++ - 比较常规选择和准备选择性能

c++ - 在 SDL 中编写 X-Bitmap 加载程序?

c++ - 如何使用 pair 遍历所有可能的字符对?

c++ - openCV 立体匹配算法(stereoBM 和 stereoSGBM)能否与垂直校正图像一起使用

c++ - 访问存储在 vector C++中的结构的多态成员

c++ getline没有得到输入

c++ - 如何将外部库与 CMake 项目链接

C++ winApi 无法处理子窗口事件

c++ - 如何更改 and(&) 运算符?