问题标签 [sigfpe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1840 浏览

c++ - C++ 代码中的浮点错误

我正在尝试解决一个问题,在该问题中我需要找出组建一个由两个成员组成的团队的可能方法的数量。(注意:一个团队最多可以有两个人)制作此代码后,它可以正常工作,但在某些情况下测试用例它显示浮点错误广告我无法找出它到底是什么。

输入:第一行:测试用例数第二行:总人数

谢谢

0 投票
2 回答
2087 浏览

macos - 如何在 OS X 中为 clang 启用浮点异常?

我希望我的代码在出现浮点错误时终止。在 linux-gcc 中,“feenableexcept()”函数完成了这项工作,但这在 OSX 中不可用。在 OS X 上使用 gcc 时,采用的方法(在 Mac OS X Intel 上启用浮点中断)在使用 gcc 时工作得很好,但在使用 clang 时不起作用。

示例代码:

使用 gcc5 编译时,结果为:

精彩的。效果很好。但是,当使用 clang(Apple LLVM 版本 7.3.0 (clang-703.0.29))编译时,结果是这样的:

不是很好。没有提高 FPE,代码只是一直在运行。我环顾四周,找不到如何让铿锵声来提高 FPE。有人对此有经验吗?谢谢!

0 投票
0 回答
283 浏览

signals - PowerPC:整数除法不生成 SIGFPE

我在 QNX 中实现了以下代码来处理除以零异常。

}

当变量类型为 float 或 double 时,此代码会生成 SIGFPE,但当将变量类型更改为 int 或 long 时,此代码不会生成 SIGFPE。我正在使用 gcc 编译器,处理器是 POWERPC MPC8347,操作系统是 QNX。我也想用整数值测试 SIGFPE。早期的相同代码也没有为浮点生成 SIGFPE,但后来我添加了 fp_exception_mask(),它工作正常。整数运算有这样的掩码吗?

0 投票
1 回答
742 浏览

c++ - 运行时错误 - SIGFPE

我有以下用于hackerearth竞争的代码并用C ++(g ++ 4.8.4)编写,它在运行时提供SIGFPE我刚刚完成

请告诉如何修复它

0 投票
1 回答
966 浏览

fortran - 从输入文件中读取实数值时出现浮点异常

我尝试从Fortran.

为此,我使用以下代码:

使用 toto.txt 包含我的真实价值的文本文件:

如果我这样编译和执行,一切正常。

但是当我使用fpe选项编译和执行时遇到了一些麻烦。我在阅读行有一个错误,如下所示:

我使用一个gfortran命令:gfortran -g1 -c -fbacktrace -ffpe-trap=invalid,zero,overflow,underflow,inexact,denormal -Wall -fcheck=all my_prog.f90

我认为我的阅读操作不正确。那么这个错误正常吗?是否有正确的方法来读取实际值?

0 投票
1 回答
134 浏览

floating-point - 基本三角方程的浮点异常

我在从地理坐标转换为地心坐标的子例程中遇到浮点异常问题。该变量geo(x)作为纬度和经度对输入子程序。该变量xyz(x)作为三组分量输出(x--格林威治子午线和赤道;y-- 90 度经度和赤道;z--北极)。

我意识到这是非标准函数,但它们通过适当的转换链接到目标文件sindcosd我之前已经对此进行了测试,它适用于使用度数而不是弧度的其他代码:

我尝试使用 GDB 浏览该程序,但无法找出问题所在。似乎方程中的所有变量都可以,但是xyz(1) = 1如果我用计算器进行计算,情况并非如此。

我在这里缺少什么导致浮点异常?我敢肯定这很简单,我对此很陌生。

0 投票
1 回答
309 浏览

c++ - 在生成 NaN 浮点数而不更改代码时停止调试器

我读了这个这个。精髓是,如果通过包含 fenv.h 并启用所有浮点异常但FE_INEXACT通过feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT);

因此,代码更改形式

这工作正常,但您必须更改代码。我有一个问题,在一个巨大的 c 和 c++ 代码库中,某处产生了一个 nan 而我不知道在哪里。将上述更改应用于数百个文件并跟踪错误不是一种选择。

有没有办法在不更改代码的情况下启用所有浮点异常?有我不知道的编译选项吗?

我们使用intel icc 15.0.3 版编译器。

0 投票
1 回答
230 浏览

c++ - NAN -> 区分除以零和具有非常大负值的指数

我在我的测试套件中包含了对 nan 的检查。

现在在以下行抛出一个 SIGFPE

指数的值约为 -4000。这当然非常接近于零,如果没有 nan 检查,计算会以零继续进行。

现在抛出信号 SIGFPE。我假设这是一个非正规数(表示为 NAN)。

如何区分除以零和负值非常大的指数?

在第二种情况下,在我的情况下,用零进行进一步计算是可行的,因为我不需要区分 +0 和 -0。

编辑:我尝试了@user2079303 的建议。我的代码看起来像这样

这会编译,但不会抛出信号或错误消息。

0 投票
0 回答
1001 浏览

python - 如何使用 fpectl 模块从源代码安装 Python 2.7?

我正在尝试从fpectl启用模块的 Docker 容器内的源代码安装 Python 2.7.14。

使用官方的 Python jessie Dockerfile作为起点,我--with-fpectl在命令中添加了配置选项./configure

你可以在这个 gist中看到我的 docker build 命令的完整输出;然而,这里有一些有趣的地方:

(我实际上认为来自的错误消息mathmodule.c是良性的,但我认为我会将它包含在上下文中,因为它是似乎与fpectl模块相关的唯一其他输出。)

当我使用此构建创建的图像启动容器时,我有一个工作 Python 安装,但没有fpectl模块:

补充说明

  • 我知道fpectl不鼓励使用该模块,并且它不存在于与官方 Python Docker 映像捆绑的 Python 构建中;但是,这是我的用例的要求(特别是使用针对 Python 安装编译的 Cython 模块的可操作性--with-fpectl,更多信息在这里这里)。

  • 看起来python通过 aptly 提供的软件包确实包含该fpectl模块(见下文)。但是,在这种情况下,出于各种原因(包括使用最新 2.7.x 的能力),我更喜欢从源代码构建。我试图检查用于 Python 包安装的配置选项,但在我自己的 Docker 构建中使用这些选项似乎也没有安装模块。

通过apt安装:

说了这么多,我错过了什么?是否需要一些额外的系统包来启用这个模块,或者在配置步骤中需要一些额外的标志?

0 投票
1 回答
1037 浏览

c++ - 如何正确避免 SIGFPE 和算术运算溢出

我一直在尝试创建一个尽可能完整的 Fraction 类,以自学 C++、类和相关的东西。除其他外,我想确保某种程度的“保护”免受浮点异常和溢出。

客观的:

避免常见运算中出现的算术运算中的溢出和浮点异常,消耗最少的时间/内存。如果避免是不可能的,那么至少检测它。

此外,这个想法是不要转换为更大的类型。这会产生一些问题(比如可能没有更大的类型)

我发现的案例:

  1. +、-、*、/、pow、root 上的溢出

    操作大多很简单(a并且bLong):

    • a+b:如果 LONG_MAX - b > a 则存在溢出。(还不够。a或者b可能是负面的)
    • ab:如果 LONG_MAX - a > -b 则存在溢出。(同上)
    • a*b:如果 LONG_MAX / b > a 则存在溢出。(如果 b != 0)
    • a/b:如果 a << b 可能会抛出 SIGFPE,如果 b << 0 则可能会溢出
    • pow(a,b): if (pow(LONG_MAX, 1.0/b) > a 那么有溢出。
    • pow(a,1.0/b):类似于 a/b
  2. 当 x = LONG_MIN(或等效项)时 abs(x) 溢出

    这很好笑。每个有符号类型都有一个范围 [-x-1,x] 的可能值。abs(-x-1) = x+1 = -x-1 因为溢出。这意味着存在 abs(x) < 0 的情况

  3. 具有大数字的 SIGFPE 除以 -1

    应用分子/gcd(分子,分母)时发现。有时 gcd 返回 -1,我得到一个浮点异常。

简单的修复:

  1. 在某些操作上很容易检查溢出。如果是这种情况,我总是可以转换为 double (有失去大整数精度的风险)。这个想法是找到一个更好的解决方案,而不是强制转换。

    在分数算术中,有时我可以进行额外的简化检查:为了解决 a/b * c/d(共素数),我可以先简化为共素数 a/d 和 c/b。

  2. 如果询问aorb是否 <0 或 > 0,我总是可以级联。不是最漂亮的。除了那个可怕的选择,我可以创建一个函数 neg() 来避免溢出
  3. 我可以采取 gcd 的 abs(x) 和任何类似情况(任何地方 x > LONG_MIN)

我不确定 2. 和 3. 是否是最好的解决方案,但似乎足够好。我在这里发布这些,所以也许有人有更好的答案。

最丑陋的修复

在大多数操作中,我需要做很多额外的操作来检查和避免溢出。这是我很确定我可以学到一两件事。

例子:

避免这些算术运算溢出的最佳方法是什么?


编辑:这个站点中有一些非常相似的问题,但它们并不相同(检测而不是避免,未签名而不是签名,SIGFPE 在特定的不相关情况下)。

检查所有这些我发现了一些答案,这些答案在修改后可能有助于给出正确的答案,例如:

  • 检测未签名加法中的溢出(不是我的情况,我正在使用签名):
  • 检测签名操作中的溢出。这可能有点太笼统了,有很多分支,并且没有讨论如何避免溢出。

  • 答案中提到的CERT 规则是一个很好的起点,但再次只讨论如何检测。

其他答案太笼统了,我想知道对于我正在查看的案例是否有更具体的答案。