草庐IT

signaling_nan

全部标签

c++ - C++ 应用程序中 NaN 不引发浮点异常的原因

为了在我的C++程序中找到浮点变量被设置为NaN的原因,我启用了这样的浮点异常:#includefeenableexcept(FE_INVALID|FE_OVERFLOW);我知道它有效,因为当我写的时候:intval=0.0/0.0;在我的程序中出现了一个浮点异常。但是NaN在我程序的浮点计算中“扩散”,我不知道哪个变量首先设置为NaN。是什么原因导致设置为NaN的变量不会导致float异常? 最佳答案 如果任何输入有一个安静的NaN值,它会导致几乎所有消耗它的浮点运算的结果都是NaN而不会引发无效异常。最可能的解释是某些数据是从

c++ - 使用 boost::signals2 编译时间非常慢

我们有一个大型代码库,多年来已成功使用boost::signals。我们最近转向boostv1.54,并决定由于boost::signals已被弃用,我们将切换到boost::signals2。我们看到的问题是编译时间太长了。例如,一个小的.cpp文件现在需要20多秒,而过去需要4秒。同样,过去需要大约10分钟才能生成的我们的一个库(大型)现在最多需要一个小时。我到处搜索有关如何通过预编译头文件、宏等改进这一点的文档,但还没有找到任何可以大大改善这种情况的方法。在procmon中查看cl.exe会发现大量IO进入boost::signals2和mpl库。此时我们不需要signals2提

c++ - NAN 传播和 IEEE 754 标准

我正在设计一个新的微处理器指令集(www.forwardcom.info),我想使用NAN传播来跟踪错误。然而,IEEE754浮点标准中有许多奇怪之处阻止了这一点。首先,我想使用NAN传播而不是错误捕获的原因是我有可变长度的vector寄存器。例如,如果我有一个包含8个元素的浮点vector,第一个元素为1/0,第六个元素为0/0,那么我只会得到一个陷阱,但是如果我在计算机上运行相同的程序vector长度的一半然后我得到两个陷阱:一个用于无穷大,一个用于NAN。我希望结果独立于vector长度,因此我需要依赖NAN和INF的传播而不是捕获。NAN和INF值将通过计算传播,以便可以在最终

c++ - VC++ 优化打破了与 NaN 的比较?

IEEE754要求NaN是无序的;当一个或两个操作数为NaN时,小于、大于、等于等都应返回false。下面的示例在所有优化级别使用g++编译时以及使用VC++的CL.exe(32位版本15.00.30729.01)编译时没有优化参数或/Od、/fp:fast、/arch:SSE的任意组合。但是,当使用/O1或/O2(以及任何/没有其他优化参数)编译时,TTFFFT结果,即使还指定了/Op。CL.exe的64位版本产生许多变体-TTFFFT、TTTFFT、TTTFFF等-取决于优化级别以及是否/fp:fast已指定,但与32位版本一样,合规行为似乎只有在禁用所有优化的情况下才有可能。我是

c++ - Qt "signal undefined reference error"继承自QObject后

我最近需要给一个类添加一个信号,所以我把类改成继承自QObject,并在类定义中添加了Q_OBJECT宏。自从这样做以来,我在下面的类行上得到了“信号undefinedreference错误为'vtableforCLICommand'”错误://Fileclicommand.h#include#include#include#include"telnetthread.h"classCLICommand:publicQObject{Q_OBJECTpublic:CLICommand(TelnetThread*parentTelnetThread);signals:voidsignal_s

c++ - pow(NAN) 非常慢

pow()对NaN值的灾难性性能的原因是什么?AsfarasIcanworkout,如果float学是使用SSE而不是x87FPU完成的,NaN应该不会对性能产生影响。这对于基本操作似乎是正确的,但对于pow()则不然。我将double的乘法和除法比作平方然后取平方根。如果我用g++-lrt编译下面的这段代码,我会得到以下结果:multTime(3.14159):20.1328msmultTime(nan):244.173mspowTime(3.14159):92.0235mspowTime(nan):1322.33ms正如预期的那样,涉及NaN的计算需要相当长的时间。使用g++-lr

c++ - 在音频样本上应用 Kiss FFT 并获得 NaN 输出?

标题解释了我的问题。我想做的很简单:加载MP3轨道(通过libmpg123)阅读样本对样本应用KissFFT到目前为止我尝试了什么inlinefloatscale(kiss_fft_scalarval){intg=0;returnval问题出现在这一行kiss_fftr(config,(kiss_fft_scalar*)samples,spectrum);其中samples包含音频样本(16位),spectrum假设保存输出数据。函数完成后,这是调试器窗口中发生的情况。谁能给我一个简单的例子,说明如何在音频(16位编码)样本上应用KissFFT函数? 最佳答

c++ - 强制所有 QNaN 改为普通 NaN (SNaN),以便抛出异常

我已将VisualStudio配置为通过_controlfp函数抛出浮点异常。这适用于NAN和INF,但不适用于QNAN。IE。安静的NaN不会引发异常。VisualStudio2008/2010是否有任何函数或配置选项会强制QNAN改为NAN,以便它们抛出异常? 最佳答案 一些有用的提示,虽然我从来没有远程做过这样的事情:阅读:http://www.cisl.ucar.edu/docs/trap.error/errortypes.html互联网上的搜索结果(我实际上只花了大约30秒)让我相信这通常是通过编译器选项启用的。不过,我似

c++ - Visual Studio 2012 C++ 使用 Boost Signal2 编译错误

我正在使用带有以下BoostSignals2代码的VisualStudio2012Ultimate:在https://github.com/cfobel/boost_signals2/blob/master/hello_world_0.cpp它会产生以下错误:c:\programfiles(x86)\microsoftvisualstudio11.0\vc\include\xmemory(348):errorC4996:'std::_Uninitialized_copy0':Functioncallwithparametersthatmaybeunsafe-thiscallrelies

c++ - 在 g++ 4.4.3 上得到负 NaN,这是标准吗?

我在带有UbuntuLucidLynx的Linux上安装了g++4.4.3,我得到了:-楠结果。在带有g++4.3.1的HardyHeron上,我得到了所有南这导致我的文本差异回归失败,因为我正在使用cout打印此数值结果。有符号的nan是什么意思,有没有办法告诉编译器一个无符号的nan就足够了? 最佳答案 行为的改变可能是由于库而不是编译器。glibc肯定会在正确的时间发生变化-从glibc源代码的ChangeLog.17中第2528行的2009-08-23条目开始:...*stdio-common/printf_fp.c:ISO