草庐IT

c++ - 使用 SSE 内在函数时如何确保 NaN 传播?

我最近读到这篇关于SSE算术运算中的NaN值的文章:Theresultofarithmeticoperationsactingontwonotanumber(NAN)argumentsisundefined.Therefore,floating-pointoperationsusingNANargumentswillnotmatchtheexpectedbehaviorofthecorrespondingassemblyinstructions.来源:http://msdn.microsoft.com/en-us/library/x5c07e2a(v=vs.100).aspx这是否意味

c++ - !NaN 不是 NaN 吗?

我发现这段代码用gcc发出警告:floatf;//Calculateavalueforfif(!f==0.0){//Handleitbeingnon-zero}这可能只是另一个团队成员的错别字,检查代码真正的意思是:if(f!=0.0)//ORif(!(f==0.0))我已经更正了代码,但我只是想知道!NaN的计算结果是什么。我们在if中使用f值,因此我们不希望NaN通过检查。 最佳答案 参见https://en.cppreference.com/w/cpp/language/implicit_conversionAprvalueo

c++ - 在 Windows C++ 中捕获 Nan 和 Inf

我今天痛苦地得知Nan和Inf有严重的副作用。例如,您是否知道sqrtf(NaN)比sqrtf(10.123132)慢15倍并且sqrtf(-1)慢30倍(!!)-这本身就是一个相当慢的浮点计算!?你计算垃圾,需要大量的时间来计算它,甚至没有意识到这一点。好的,在Linux下,您可以通过在Nan和Inf错误发生时抛出异常来捕获它们:#includefeenableexcept(FE_DIVBYZERO|FE_INVALID|FE_OVERFLOW);如何在Windows下实现这一点?编辑:基准测试代码:floata,b;a=1.0/0;//infa=-10;//alsonicelong

当我应该获得双重时,为什么我会得到Nan?

我的问题在于定义first_x和second_x。当我打电话给quad_eq功能,我根据以下代码获得-NAN(IND)返回。如果我更改.pushback()方法参数为文字整数,我得到返回的整数而不是NAN。这使我相信问题是我的计算/定义first_x和second_x。也许我没有看到或理解的C++技巧。谁能看到我的问题是什么?(如果有帮助的话,我正在锻炼BjarneStroustrup的C++原理和使用C++练习,他给我std_lib_facilities.h文件,因为我还不了解标头)vectorquad_eq(doublea,doubleb,doublec){vectoranswers;do

c++ - C/C++ NaN 还是 bool 值?

我必须保留一个双值缓存。使用后应作废。两种选择一个是添加booleanflag,缓存值好的时候true,使用的时候设置为false,flag为false的时候重新计算并重新填充。第二个更有趣-我可以将它保留为double值并使用NaN作为无效/需要重新计算标志。doubleget()const{if(!isnan(_value)){doublet=_value;_value=std::numeric_limits::quiet_NaN;returnt;}}有人反对吗?对效率有什么想法吗? 最佳答案 使用bool值,否则当您计算的do

c++ - double 和 NaN 的比较结果是什么?

我有以下程序:#include#includeintmain(){doublea=1;doubleb=nan("");std::coutb)a)输出:00一般来说,从nan的含义-notanumber可以明显看出,任何对nan的操作本质上都是毫无意义的。从我在互联网上找到的IEEE-754我发现如果在FPU中至少有一个操作数是nan结果也是nan,但是如上例所示,我没有发现正常值与nan之间的比较。标准是怎么说的? 最佳答案 Whatdoesstandardsayaboutit?C++标准没有说明对NaN的操作如何运作。它未指定。因

C++ 问题每次运行我的程序时,我都会得到 "nan"作为输出

我需要创建一个程序,该程序具有将以英尺为单位的高度更改为以米为单位的高度的功能。我创建了这个函数,当我从函数中cout时,我得到了正确的值,但是当我在main中cout时,我得到了“nan”。我不明白为什么不打印该值。这是我第一次使用这个网站,如果有任何遗漏,我深表歉意。#include#include#includeusingnamespacestd;doubleheightInMeters(doublefeet,doubleinches){doublefootToMeter=0.305;doubleinchToMeter=0.0254;doubleheightInMeters=((

c++ - NaN 何时不在 C++ 中传播?

NaN通过“大多数”操作传播,如NaN-Wikipedia中所述.我想知道NaN不会传播的操作。例如,我正在用C++编写代码,发现以下代码打印出1,这不是NaN。constdoubleresult=std::pow(1,std::numeric_limits::quiet_NaN());std::cout对于std::pow函数,此行为在std::pow-cppreference.com中描述.您能分享其他示例吗? 最佳答案 下面的示例演示了返回非NaN的NaN函数。该列表在IEEE754-2008,9.2.1特殊值(还有一些其他函

c++ - boost serialization 1.5.5 在遇到 Nan 和 Inf 时崩溃

boost序列化似乎无法从基于文本的存档中恢复Nan和inf的值。在这种情况下,除非您处理archive_exception,否则程序将终止,有什么解决方案吗? 最佳答案 图书馆作者hasthistosay:ThesimpletruthisIneverconsiderthis.WhenitcameupthelasttimeIdidn'treallythinkaboutitverymuchasIwasinvolvedinotherthingsandIhopedintereste[d]partiesmightcometoaconsens

C++ float 到 nan

我想知道是什么让C++中的float成为nan。我使用的是一个大型数据集,很难追踪。我想知道将float更改为nan以减少错误可能性的方法。我找到了导致nan问题的代码。我发现s/m在某些情况下是nan。但是我不知道怎么解决。floatgp(floatx){floate=2.71828183;x*=-1;floats=pow(e,x);floatm=(1+pow(e,x))*(1+pow(e,x));returns/m;} 最佳答案 取自wikipedia->特殊值->nan0/0∞×0平方(−1)一般来说是“无效操作”(我不确定是