为什么0.0f/0.0f不会产生任何运行时错误?

Des*_*tor 6 c# c++ java floating-point nan

最近我测试了以下程序&我期待运行时错误,但它显示" nan "作为输出.为什么和如何?我正在使用g ++编译器.

#include <iostream>
int main()
{
   float f=0.0f/0.0f;
   std::cout<<f;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

同样的方式我也在Java和C#中尝试过类似的程序,它再次显示"nan"作为输出.

class Test
{
   public static void main(String args[])
   {
       float f=0.0f/0.0f;
       System.out.println(f);
   }
}

class Test
{
   public static void Main(string[] args)
   {
       float f=0.0f/0.0f;
       Console.Write(f);
   }
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何实现浮点运算以及它与整数运算的区别.在C++的情况下它是不确定的行为?如果是,为什么?请帮我.

Pau*_*ton 10

nan代表不是数字.除以整数0总是一个错误,因为在数学中你不能除以0.因此,当除以整数0时,许多语言都会抛出异常.

使用浮点数进行此操作是不太合理的,因为浮点计算并不精确.例如,计算可能导致0.0f因为0.0f是答案的最接近的浮点值,而不是因为答案的真值在数学上为0.因此,尝试除以浮点值0.0f可能不是错误算法的结果.nan本质上意味着无法确定计算的答案,因为它涉及两个数字的分割,因此计算机无法将它们与0区分开来.