我有一个算术表达式,例如:
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/