加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在c中的数字代码库中的计算中发生信号或捕获’nan’

发布时间:2020-12-16 07:04:24 所属栏目:百科 来源:网络整理
导读:我们有用C编写的数字代码.很少但在某些特定输入下,某些计算会产生“纳米”值. 是否有标准或推荐的方法,当某个数值计算导致生成’nan’时,我们可以通过该方法停止并提醒用户? (在调试模式下).如果等于’nan’,检查每个结果似乎是不切实际的,因为矩阵和向量的
我们有用C编写的数字代码.很少但在某些特定输入下,某些计算会产生“纳米”值.

是否有标准或推荐的方法,当某个数值计算导致生成’nan’时,我们可以通过该方法停止并提醒用户? (在调试模式下).如果等于’nan’,检查每个结果似乎是不切实际的,因为矩阵和向量的大小很大.

标准数值库如何处理这种情况?你能否对此有所了解?

解决方法

应用于数字运算时,会传播NaN.因此,检查作为NaN的最终结果就足够了.至于如何做到 – 如果为> = C 11建造,那么就像Goz注意到的那样有std :: isnan.对于< C 11 - 如果想要防弹 - 我会亲自进行比特检查(特别是,如果可能涉及优化). NaN的模式是

?  11.......1  xx.......x
sign bit ^  ^exponent^  ^fraction^

哪里?可以是任何东西,并且至少一个x必须是1.

对于平台相关的解决方案,接缝是另一种可能性. glibc中有函数feenableexcept(可能带有信号函数和编译器选项-fnon-call-exceptions),当发生无效的浮点运算时,它会启动SIGFPE sinals的生成.函数_control87(可能带有_set_se_translator函数和编译器选项/ EHa),它在VC中允许几乎相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读