C++除数是0/0.0时的结果

在《算法竞赛入门经典》书上看到这个问题,于是做了个小试验,结果出乎意料,故记录如下。

注:实验为OSX系统下,使用g++编译器进行。其它编译器未测试。

整形除法

除数为0时编译器警告,结果错误且不可预测,多次执行每次结果不同。

代码

#include 
#include 

int main(int argc, char const *argv[])
{
  printf("%d\n", 9/0);
  return 0;
}

编译过程中的警告

/Users/test/code/algorithms/aoapc-bac2nd/ch1/playground.cpp:6:19: warning: division by zero is undefined [-Wdivision-by-zero]
  printf("%d\n", 9/0);
                  ^~
1 warning generated.

结果

1451766616

浮点型除法

  • 若被除数为0,则结果为nan
  • 若被除数为非0,则结果为inf
#include 
#include 

int main(int argc, char const *argv[])
{
  printf("%f\n", 1.0/0.0);     // inf
  printf("%f\n", 0.0/0.0);     // nan
  // 若除号两边任意一个为浮点数,则计算时int将被隐式转化为浮点数进行计算,所以如下两例同上面两个例子
  printf("%f\n", 1.0/0);       // inf
  printf("%f\n", 0/0.0);       // nan
  return 0;
}

你可能感兴趣的:(C++除数是0/0.0时的结果)