安静的NaN和信号NaN有什么区别?

我已经阅读了浮点数,并且我明白NaN可能来自操作。 但我完全不明白这些概念是什么。 有什么区别?

在C ++编程中可以生成哪一个? 作为一名程序员,我可以编写一个程序来创build一个sNaN吗?

当一个操作导致一个安静的NaN时,没有任何迹象表明任何exception,直到程序检查结果并看到一个NaN。 也就是说,如果在软件中实现浮点,计算将继续进行,而没有来自浮点单元(FPU)或库的任何信号。 信号NaN将产生一个信号,通常以FPU的例外forms。 是否抛出exception取决于FPU的状态。

C ++ 11 在浮点环境中添加了一些语言控件,并提供了标准化的方法来创build和testingNaN 。 但是,控件是否被实现并不是很好的标准化,浮点exception通常不会像标准C ++exception一样被捕获。

在POSIX / Unix系统中,通常使用SIGFPE的处理程序来捕获浮点exception。