问题标签 [floating-point-exceptions]
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.
c++ - 无效输入上的浮点异常有什么危险?
我对dcraw进行了一些模糊处理,发现了一个浮点异常。
这有什么危险?plen
它从损坏的文件中读取一些长度并计算foo[i % plen]
. 如果plen == 0
这是标准未定义的,则 gcc 会引发浮点异常。编辑:并且没有捕获异常(这是C)并且程序终止。
我应该关心吗?有没有可能被利用或导致其他坏事的情况?代码的一种可能的正确行为是注意到文件已损坏并且仅存在。这与扔 FPE 然后退出有何不同?
(我很惊讶我没有找到关于这个的问题,因为这对我来说似乎非常基本。)
c++ - 如何克服运行时错误信号:25?等效地,浮点错误:核心转储?
所以我制作了这个函数来打印间隔 L,U:
1 之间的大素数。这个函数对于小数字正确运行。
2. 当我尝试在 IDEONE.com 上打印两个大数之间的质数(例如,100000000 和 100100000)
时,它说:Linux 上的运行时错误信号:25
(使用终端)它说:浮点异常(核心转储)
在这个从小数到大数的转换过程中可能出了什么问题?
编辑:我通过从我的计算中消除 primes[] (检查评论)中未使用的间隔解决了这个问题。这可能会大大减少计算次数(标记的 while 语句中的计算量减少了 10 倍。)感谢所有回复的人。
delphi - Delphi中的屏蔽异常
几天来,我一直在努力(但徒劳)用例外面具。
我开发了一个应用程序,可以对数十万条记录进行繁重的浮点计算。显然代码必须能够处理异常,尤其是那些与浮点计算相关的:溢出、ZeroDivide 等。
应用程序在具有许多不同类型处理器的 Windows 7(32 位或 64 位)下正确运行,如果发生错误,则正确处理条件,引发异常并丢弃记录。
不幸的是,当我在打算运行的位置启动应用程序时,问题就开始了:在具有 Intel Xeon E5-2640 v2 CPU 和 Windows Server 2003 R2 的专用服务器上。这里没有引发异常:有错误的记录不会被丢弃,因此结果会被机器描述的这些数值污染+INF
或污染-INF
。
问题是,在服务器上,错误屏蔽的默认设置与我们在 Windows 7 中找到的设置不同。特别是,GetExceptionMask
我发现默认情况下在服务器上调用该过程,exZeroDivide
而如果GetExceptionMask
在 Windows 7 上调用,则不会屏蔽此异常。结果就是我所说的:在服务器上运行应用程序时,这些异常不会引发,而是由处理器处理,返回极端值和“污染”数值。
好的,不要惊慌,我说,您只需调用(即在初始化部分)SetExceptionMask
exclude exZeroDivide
,但不起作用。或者更好的是,虽然在调用SetExceptionMask
异常 之后exZeroDivide
不再被屏蔽,但当执行具有浮点计算的代码时,TArithmeticExceptionMask
返回的集合GetExceptionMask
仍然包含exZeroDivide
,因此如果发生错误,则不会引发异常。
谁能告诉我正确的打电话方式是SetExceptionMask
什么?
这就是为什么屏蔽默认值可能与计算机和另一个不同的原因?操作系统或处理器类型?
谢谢。
python - 无法将字符串转换为浮点数
我从 csv 获取信息,我需要获取一个理论上是浮点数但可以为空的字段,我是这个函数,它获取浮点数所在的行 [i],并且应该返回浮点数,
但是当我尝试它时,这个错误告诉我“float()参数必须是字符串或数字”
c++ - C ++中的浮点异常?
我正在编写一个简单的程序来进行 int 除法并显示余数。我试图让程序连续运行,直到用户输入 0 0。程序确实在用户输入 0 0 之后停止,但在每次都说“浮点异常”之前不会停止。这是代码:
fortran - 浮点错误 gfortran
我正在尝试调试 Fortran 程序。为了捕捉浮点错误,我为 gfortran 4.9.0 使用了以下编译器选项:
使用这些选项,程序在这一行失败:
尝试读取这些输入时:10.0 70.0
如果我删除
从编译器选项中,它读取以下行就好了。两个变量都声明为real(8)
. 在输入文件中,我尝试了空格、逗号等,但没有看到任何变化。有人有建议吗?
c++ - C/FORTRAN 将双下溢设置为零
我有一个遗留的 FORTRAN 项目,有一些非常密集的计算。我希望这个数学代码可以被 C/C++ 代码访问,所以我构建了一个 FORTRAN dll,将它导入 C/C++ 并开始从我的 FORTRAN dll 接收浮点下溢。
同时,如果我从 FORTRAN 应用程序调用 FORTRAN dll 代码,它的执行效果很好。
最后,我发现我使用的编译器(它是集成到 VS2013 中的 FTN 95)有一个选项(/UNDERFLOW)。如果未指定此标志,则默认情况下所有下溢都转换为零。这发生在 FORTRAN 应用程序中。当我使用 C 代码从这个 dll 执行方法时,我收到下溢。
所以,问题是:有没有办法强制 VC++ 编译器将下溢转换为零?
PS:是的,我知道依赖一直抛出浮点异常的代码是愚蠢的。然而,这段代码是旧的,在这一点上,用最新的技术完全重写它是不可能的。
c++ - c++动态数组浮点异常
对于我的作业,我必须在 c++ 中设计一个数组列表,只使用一维数组和指针来使数组动态化。我已经进行了充分的测试并且我的功能正常工作,但是当我使用老师提供给我的 main 时,我得到了这个浮点错误。这个作业的重点是创建一个可以为教师主程序工作的类,而无需更改主程序中的任何代码
这是主要的:
这是我的cpp:
根据我在网上阅读的内容,当您尝试除以零或出现无限值时,通常会引发浮点异常,但我不明白我是如何出现这些问题的。
我的代码通过添加和删除数字 1-50 的主代码,但是一旦我进入设置数组以保存素数(在主代码中的 arr.erase(arr[0]) 之后),我就会收到错误
我只是在主目录中设置了几个标签来查找我的号码进入的样子while ((j<arr.size()) && (i%arr[j]!=0))
,我发现我在崩溃前的号码是
gcc - 在 MinGW GCC 上启用浮点异常?
如何在MinGW GCC上启用浮点异常,其中fenableexcept缺失?即使是相当完整的解决方案实际上也没有抓住这一点,尽管他们似乎打算这样做。我更喜欢与未来出现的任何标准接近的最少代码。最好,代码应该在有和没有 SSE 的情况下工作。一个完整的解决方案,展示如何启用硬件信号,捕捉它,并重置它是可取的。必须使用高优化级别和完整的迂腐错误和警告进行干净编译。在单元测试场景中多次捕获的能力很重要。有几个问题提供了 部分 答案。