为什么c中1.0/0.0=inf,0.0/0.0=nan?

环境:gcc std=-c99(gcc version没查出来,用的IDE...)

猜测是和浮点型数值表示的方式有关(以及除法的影响?),刚学不久对这方面不是很了解,请知晓的前辈指教,感谢!

阅读 5.1k
3 个回答

C里面浮点数运算是用的IEEE 754标准,支持infnan的表示及运算。

  • inf = infinity(无穷大):1.0 / 0.0 的结果是无穷大这是很合理的。
  • nan = not a number(无法用数字表示、未定义):0.0 / 0.0 在数学上是未定义。

infnan这两个特殊值在IEEE 754 浮点数算术标准中都有定义,而PC机和服务器的处理器都在使用IEEE 754做浮点运算,因此你的C程序会得到这样的结果。

需要注意的是(多谢 FirstLove 指正),C语言标准并没有要求浮点数运算严格遵守IEEE 754,而是在尽量去保持兼容。这主要是因为做为语言标准,要照顾那些低端处理器(如烤箱上的处理器等)。它们也用C编程,但是甚至都没有浮点运算单元。

在数学里就有这种关系,高数没学么?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进