我在visualstudioexpress中使用c++生成随机表达式树,用于遗传算法类型的程序。因为它们是随机的,树经常产生:被零除、溢出、下溢以及返回“inf”和其他字符串。我可以为字符串编写处理程序,但文献让我对其他人感到困惑。如果我理解正确,我必须先设置一些标志?建议和/或指向一些文献的指针将不胜感激。编辑:double变量中返回的值为1.#INF或-1.#IND。我把它们称为字符串是错误的。 最佳答案 根据http://msdn.microsoft.com/en-us/library/aa289157%28v=vs.71%2
intmain(){floatx=k;//kissomefixedpositivevaluewhile(x>0)x--;return0;}上面的程序可以无限循环吗? 最佳答案 是的,这是可能的。以最大float为例。如这段代码所示,对于最大的floatm,m等于m-1:#include#includeintmain(){autom=std::numeric_limits::max();autol=m;l--;std::cerr演示:http://ideone.com/Wr9zdN因此,有了这个起始值,循环将是无限的。这是为什么?fl
有没有办法将float舍入到2点?例如:3576.7675745342556变为3576.76。 最佳答案 round(x*100)/100.0如果你必须让事物保持float:roundf(x*100)/100.0使用标准库函数的灵活版本:doubleGetFloatPrecision(doublevalue,doubleprecision){return(floor((value*pow(10,precision)+0.5))/pow(10,precision));} 关于c++-限制
我发现浮点模型/错误问题非常令人困惑。这是一个我不熟悉的领域,而且我也不是低级C/asm程序员,所以我希望得到一些建议。我有一个用VS2012(VC11)构建的大型C++应用程序,我已将其配置为抛出浮点异常(或更准确地说,允许C++运行时和/或硬件抛出fp异常)——它正在抛出其中很多在发布(优化)版本中,但不在调试版本中。我假设这是由于优化和可能的浮点模型(尽管为发布和调试版本设置了编译器/fp:precise开关)。我的第一个问题与管理应用程序的调试有关。我想控制抛出fp异常的位置以及它们被“屏蔽”的位置。这是必需的,因为我正在调试(优化的)发布版本(这是发生fp异常的地方)——我想
任何人都可以推荐任何包含维护各种浮点运算稳定性的策略的C++库/例程/包吗?示例:假设您想对一百万个vector/数组求和longdouble在单位区间(0,1)中,并且每个数字的数量级大致相同。天真地总结for(inti=0;i不可靠-足够大i,sum将比array[i]的数量级大得多,等等sum+=array[i]相当于sum+=0.00.(注意:这个例子的解决方案是二进制求和策略。)我处理数千/数百万微小概率的总和和乘积。我正在使用任意精度库MPFRC++具有2048位有效数,但同样的问题仍然存在。我主要关心的是:对多个数字进行准确求和的策略(例如上面的示例)。什么时候乘法和除法
我正在寻找适用于C/C++的任意精度浮点库(首选纯C)。我需要任意精度指数。GMP和MPFR使用固定大小的指数,因此它们不合格(我有一些解决方法的想法,但我更喜欢开箱即用的解决方案)。如果可以自动调整指数精度以防止出现无穷大值,那将是一个不错的功能。如果您确定不存在这样的库,请说出来。 最佳答案 据我所知,没有什么比GMP/MPFR更主流的了。但是FredrikJohansson的arb包含一个名为fmpr的模块提供具有任意精度指数的float。 关于c++-是否存在允许任意精度指数的C
像“为什么不是0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1=0.8?”这样的问题让我想到了.........让编译器警告它四舍五入到二进制浮点类型中最接近的可表示的浮点常量可能会很好(例如0.1和0.8在radix-2float中四舍五入,否则他们将需要无限量的空间来存储无限数量的数字)。我查看了gcc警告,到目前为止没有找到用于此目的的警告(-Wall、-Wextra、-Wfloat-equal、-Wconversion、-Wcoercion(不支持或仅限C?)、-Wtraditional(仅限C)似乎没有做我想做的事情想要)。我也没有在MicrosoftVisua
GCC是否具有与VC的floatingpointmodelswitch等效的编译器开关?(/fp)?特别是,我的应用程序受益于使用/fp:fast进行编译并且精度不是什么大问题,我应该如何使用GCC进行编译? 最佳答案 试试-ffast-math。在gcc4.4.1上,这会打开:-fno-math-errno-不要为单指令数学函数设置errno。-funsafe-math-optimizations-假设数学运算的参数和结果有效,并且可能违反标准-ffinite-math-only-假设参数和结果是有限的。-fno-rounding
在另一个问题中,有人想知道为什么他们会得到“浮点错误”,而实际上他们的C++程序中有一个整数被零除。围绕这一点展开了讨论,有些人断言浮点异常实际上从未因浮点除以零而引发,而只会在整数除以零时出现。这对我来说听起来很奇怪,因为我知道:所有Windows平台上x86和x64上的MSVC编译代码报告int除以零为“0xc0000094:整数除以零”,浮点除以零为0xC000008E“浮点除以零”(启用时)IA-32andAMD64ISA指定#DE(integerdivideexception)作为中断0。浮点异常触发中断16(x87浮点)或中断19(SIMD浮点)。其他硬件具有类似的不同中断
列表初始化({...}语法)不允许缩小转换。例如,尝试使用3.14f列表初始化inti会出现编译错误,因为从浮点值到整数的转换正在缩小::11:32:error:narrowingconversionof'3.1400001e+0f'from'float'to'int'inside{}[-Wnarrowing]inti{3.14f};^话虽如此,为什么可以用3.14构造一个double类型的floatf?(从double到float的转换被认为是缩小的。)执行以下操作:floatf{3.14};没有编译错误。 最佳答案 在被认为是缩