use*_*267 18 c c++ visual-c++
可能重复:
返回值1.#INF000
我一直认为除以0会导致编译程序崩溃
但是我今天发现(使用VC++ 2010 Express),除以0得到的东西叫做1.#INF000,它应该是正无穷大
当它被传递给一个函数时,它被传递为-1.#IND000
这是怎么回事?
在Google上搜索1.#INF000和-1.#IND000也没有提供任何明确的解释
它只是VC++特有的东西吗?
Kla*_*äck 25
浮点除零的行为与整数除零的行为不同.
IEEE浮点标准区分+ inf和-inf,而整数不能存储无穷大.整数除零会导致未定义的行为.浮点除以零由浮点标准定义,结果为+ inf或-inf.
编辑:
正如Luchian所指出的,C++实现不需要遵循IEEE浮点标准.如果您使用的实现不遵循IEEE浮点标准,则浮点除以零的结果是未定义的.
Luc*_*ore 12
编辑:问题是关于C++,并且C++中的结果是未定义的,正如标准清楚地说明的那样,而不是IEEE或其他实际上没有规范C++语言的实体.标准呢.C++实现可能遵循IEEE规则,但在这种情况下,很明显行为是未定义的.
我一直认为除以0会导致编译程序崩溃
不,它导致未定义的行为.任何事情都可能发生,不能保证崩溃.
根据C++标准:
4)二进制/运算符产生商,二元%运算符从第一个表达式除以第二个表达式得到余数.如果/或%的第二个操作数为零,则行为未定义 ; 否则(a/b)*b + a%b等于a.如果两个操作数都是非负的,那么余数是非负的; 如果没有,余数的符号是实现定义的79).(强调我的)
| 归档时间: |
|
| 查看次数: |
17268 次 |
| 最近记录: |