草庐IT

C++浮点精度

全部标签

c++ - 关于整数和浮点性能的 SSE4 和 SSE2 - 哪个更快?

虽然您通常在CPU上获得比浮点性能更好的整数算术性能,但有人可以澄清SIMD版本的情况。例如:__m128i_mm_mul_epi32(__m128ia,__m128ib);//(multiplies2integervectors)对比:__m128_mm_mul_ps(__m128a,__m128b);//(multiplies2floatvectors)哪个会产生更高的性能?(假设机器具有SSE4功能)。我这么说是因为我根据SSE2指令编写了我自己的小数学库,我不知道我是否应该继续使用__m128i. 最佳答案 让我展示一下我回

c++ - 使用 stringstream 读取浮点值的奇怪失败

我有以下简单代码,它使用c++stringstream读取浮点值(double)。我使用stringstream::good检测读取是否成功。奇怪的是,值被读入float变量,但是good()返回false。底部的代码返回:failed:3.14159我在mingw32下使用gcc4.8.1编译代码,使用g++-std=c++11test.cpp。知道为什么这个读法不是好吗?判断float实际读取成功的正确方法是什么?谢谢#include#includeusingnamespacestd;voidreadFloat(strings){doublei=0!;stringstreamss(

c++ - int64_t 再次加倍到 int64_t,精度损失

我需要解析用科学记数法表示的给定类型(例如:longlonginteger)。示例:123456789012345678.3e-3123456789012345678.3我知道给定字符串的类型,但我不能使用strtoll,因为数字是以科学记数法给出的。我所做的是使用strtod转换它,对int64_t进行错误检查并将其转换回int64_t。ErrCheckInt和ErrCheckDouble对整数和浮点类型进行错误检查(上溢、下溢等),并将数字转换为任何类型。.doubleres=strtod(processedStr,&end);return(std::is_floating_poi

c++ - 在用它执行算术时隐式地将对象转换为浮点类型

假设我们有一个全局对象pi,我们想根据上下文将其隐式转换为float或double。以下不起作用:#includeclassPi{public:Pi(){}operatorfloat()const{returnstd::atan(1.0f)*4.0f;}operatordouble()const{returnstd::atan(1.0)*4.0;}};constPipi;#include#includeintmain(){std::cout它不起作用的原因是编译器不知道它是否应该将pi隐式转换为float或double.但是,假设我们总是希望它在二元算术运算符中转换为另一个操作数的类型

c++ - MASM 使用 VS 击败未优化的 .cpp 但不是未优化的 .c

我有一个非常简单的函数,它使用行主矩阵(float**)转换vector(float*):intvector_by_matrix(float**m,float*v,float*out,intsize){inti,j;floattemp;if(!m||!v||!out)return-1;for(i=0;i代码最初是使用VisualStudio(2013)C++编译器编译为C++(x64);并且没有优化非常慢(该函数在运行期间被调用数百次/数千次并且系统的大小通常很大c.size=10000)。通过将优化设置为高(O2)并将浮点模式设置为快速,性能提升非常大(x20)。但是,我决定将文件转

C++ 模板 - 浮点型和整型的不同特化

我正在尝试编写一个带有如下签名的函数:templateTobar(Fromin){...}这个函数需要有不同的行为取决于ifTo是float型还是积分型。(假设From是整数且都是算术)这可以使用ifconstexpr(std::is_integral::value){...}else{...}轻松实现,但是我仅限于没有ifconstexpr的C++11.实现这种特化的好方法是什么? 最佳答案 您可以将模板重载与SFINAE一起使用.例如templatetypenamestd::enable_if::value,To>::typeb

我想在浮点值中显示离开持续时间

我创建了字段half_day_lowered在hr_leave_rules.pyfromodooimportmodels,fields,api,_classHRLeaveRules(models.Model):_name='hr_leave_rules.leave_rules'half_day_allowed=fields.Selection([('yes',"Yes"),('no',"No")],string="HalfDayAllowed",required=True)而且,我也继承了领域get_number_of_days申请的休假的计算是多少天和holday_status_id这表示离

c++ - 如何提高轮廓精度?

我正在使用OpenCV进行一个项目。我需要从高清照片中精确裁剪出一些对象。我正在使用四叉树将我的照片切割成碎片,然后我计算每个四边形的同质性以确定对象的一部分是否在四边形中。我根据四边形的同质性应用了一些具有不同阈值的过滤器作为Canny。我希望这个描述是可以理解的。此算法适用于某些类型的对象,但我对其他一些对象感到困惑。这里有一些我的问题的例子:我想要一种方法来压平我的轮廓。第一个截图是使用canny过滤器和floodfill之后的截图。第二个是最终的掩模结果。http://pastebin.com/91Pgrd2D为了达到这个结果,我使用了cvFindContours()所以我有了

c++ - 为 boost::program_options 设置精度

有没有办法改变boost::program_options在program_options::options_description的帮助文本中格式化选项的默认值的方式?(那个可以通过cout得到)?特别是我有默认值是float,所以通常的十进制到二进制转换给我一个看起来像--arg(0.100000001)的帮助文本。这是非常丑陋的。使用cout不起作用,因为program_options是将自身设置为某些内部流的默认值以首先进行格式化(至少这是我通过查看源代码推断的),然后得到的结果。编到cout是结果字符串(流?)。谢谢。 最佳答案

c++ - "double"的操作和 C 中的优化

我最近分析了一段用VS2005编译的旧代码,因为在“调试”(无优化)和“发布”(/O2/Oi/Ot选项)编译中存在不同的数值行为。(简化的)代码如下所示:voidf(doublex1,doubley1,doublex2,doubley2){doublea1,a2,d;a1=atan2(y1,x1);a2=atan2(y2,x2);d=a1-a2;if(d==0.0){//NOTE:Iknowthat==onrealsis"evil"!printf("EQUAL!\n");}函数f如果使用相同的值对调用(例如f(1,2,1,2)),则预计会打印“EQUAL”,但这并不总是发生在“发布”中