当前位置:  开发笔记 > 编程语言 > 正文

如何使用std :: signaling_nan?

如何解决《如何使用std::signaling_nan?》经验,为你挑选了2个好方法。

在查看关于SO的另一个问题(在C++中使用NaN)后,我变得好奇std::numeric_limits::signaling_NaN().

我无法获得signaling_NaN抛出异常.我想也许通过发信号它真的意味着一个信号,所以我尝试捕捉SIGFPE,但不...

这是我的代码:

double my_nan = numeric_limits::signaling_NaN();
my_nan++;
my_nan += 5;
my_nan = my_nan / 10;
my_nan = 15 / my_nan;
cout << my_nan << endl;

numeric_limits::has_signaling_NaN 计算结果为true,因此它在我的系统上实现.

有任何想法吗?

我正在使用ms visual studio .net 2003的C++编译器.我回家时想在另一个地方测试它.

谢谢!



1> bk1e..:

您可以使用该_control87()函数启用浮点异常.从MSDN文档_control87():

注意:

默认情况下,运行时库会屏蔽所有浮点异常.

启用浮点异常时,您可以使用signal()或SEH(结构化异常处理)来捕获它们.



2> peterchen..:

警告:使用第三方DLL可以默默启用这些异常.对于加载以默认启用它们的语言编写的DLL尤其如此.

我在两个实例中发生过这种情况:从嵌入式浏览器控件打印到HP打印机,并从InnoSetup注册我的DLL(将一些初始值设置为NaN),这是用Delphi编写的.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有