草庐IT

Double-precision_floating-point_f

全部标签

c++ - 对( double )实数 vector 进行排序并获得它们

在C++中,想要对较长的(2^20)实数vector进行排序,显然sort()可以解决问题。在我习惯了漂亮的order()函数之前使用过R,该函数产生导致排序vector的排列。例子:x={24,55,22,1}然后是排列perm={3,2,0,1}按升序将原始x映射到排序后的x。我或许可以实现一些冒泡排序,它不仅对x进行排序,而且对vector{0,1,2,...}执行相同的转置并输出两者,但我相信有人一定已经考虑过了,尤其是高效地完成了。 最佳答案 我想说最好的方法是创建一个整数0..N的vector,然后使用比较函数对该数组进

c++ - 用非零值初始化 double 组 (blas)

我已经分配了一个很大的双vector,假设有100000个元素。在我的代码中的某个时刻,我想将所有元素设置为一个常量、非零值。如果不对所有元素使用for循环,我该如何做到这一点?如果有帮助,我也在使用blas包。 最佳答案 你可以使用std::fill(#include):std::fill(v.begin(),v.end(),1);当然这本质上也只是一个循环.. 关于c++-用非零值初始化double组(blas),我们在StackOverflow上找到一个类似的问题:

c++ - 在 C++ 中防止从 float 到 double 的隐式转换

基本上,如果我想要这样的东西,doubleb=sin(2.2);但是不小心写了这样的东西,doubleb=sin(2.2f);没有错误甚至警告消息,即使这显然会导致不同的、不准确的、因此不正确的结果。可以通过强制编译器不对float进行任何隐式转换来防止这种类型的错误。有什么方法可以实现这一点,无论是通过编译开关(最好在VisualStudio中)、一些智能宏,还是一个行为类似于float/double变量并声明其自己的运算符的类?编辑:我也对使用运算符(例如doubleb=2.2f*2.2f)或赋值(doubleb=2.2f)解决类似问题感兴趣。 最佳答案

c++ - 快速获得接近 2 的幂数( float )的方法

在数值计算中,经常需要将数字缩放到安全范围内。例如计算欧氏距离:sqrt(a^2+b^2)。这里,如果a或b的大小太小/太大,则可能发生下溢/溢出。解决此问题的常用方法是将数字除以最大幅度的数字。然而,这个解决方案是:慢(除法慢)导致一些额外的不准确所以我认为与其除以最大幅度的数,不如将它乘以一个接近的2的幂倒数。这似乎是一个更好的解决方案,因为:乘法比除法快得多更高的准确性,因为乘以2的幂数是精确的所以,我想创建一个小的效用函数,它具有这样的逻辑(^,我的意思是取幂):voidgetScaler(doublevalue,double&scaler,double&scalerRecip

【图像拼接/线段匹配】论文精读:Novel Coplanar Line-points Invariants for Robust Line Matching Across Views(CN)

第一次来请先看这篇文章:【图像拼接(ImageStitching)】关于【图像拼接论文精读】专栏的相关说明,包含专栏使用说明、创新思路分享等(不定期更新)图像拼接系列相关论文精读SeamCarvingforContent-AwareImageResizingAs-Rigid-As-PossibleShapeManipulationAdaptiveAs-Natural-As-PossibleImageStitchingShape-PreservingHalf-ProjectiveWarpsforImageStitchingSeam-DrivenImageStitchingParallax-tol

c++ - SSE:将 __m128 转换为 float

我有以下一段C代码:__m128pSrc1=_mm_set1_ps(4.0f);__m128pDest;inti;for(i=0;ifor循环结束之前的一切都有效。我现在要做的是将__m128类型转换回float。因为它存储了4个float,所以我想我可以很容易地将它转换回float*。我究竟做错了什么?(这是一个测试代码,所以不要怀疑)。我基本上尝试了所有我能想到的可能的转换。感谢您的帮助。 最佳答案 您可以使用_mm_store_ps将__m128vector存储到float组中。alignas(16)floatresult[4

C++ 位移一个 float

floatlength=32.32f;longi=*(long*)&length;//castingafloatpointertoalongpointer...i>>=1;//rightshiftibut1...ordivby2length=*(float*)&i;//isthisnecessary?打印长度给出:0.0最终结果应该是:16.16;此创意来自http://en.wikipedia.org/wiki/Fast_inverse_square_root.我试图理解代码的部分是取出float中的long并对其执行按位运算。我猜重点是通过避免分支来提高性能?上面的代码失败了。谁能

c++ - 在 C++ 中转储十六进制 float

我试过以下:std::cout但它以十进制转储了它。我想看看11.01(十六进制的17.0625)。如何以十六进制打印一些浮点值?请不要提供以下解决方案:voidouthexdigits(std::ostream&out,fp_td,intmax_chars=160){while(d>0.&&max_chars){while(d=1.&&max_chars){inti=0;while(d>=1.)++i,--d;out有什么方法可以在STL/boost中转储十六进制float吗? 最佳答案 尝试cout这需要C++11。

c++ - 如何在 Lua 5.2.3 中将 lua_number 从 double 正确更改为 float

我希望lua_number得到一个float而不是double。我知道我必须更改luaconf.h中的某些内容,但我不知道是什么。我正在使用Lua5.2.3和VisualStudioC++。 最佳答案 您需要编辑luaconf.h并更改这些:LUA_NUMBER到floatLUA_NUMBER_SCAN到"%f"LUA_NUMBER_FMT到"%.7g"l_mathop(x)到(x##f)lua_str2number使用strtof对于最后两个,您可能需要一个支持(部分)C99标准的C编译器。

c++ - 使用 GCC 或/和 IAR 编译时如何禁用 double 学?

我的嵌入式C代码在具有单精度FPU的CortexM4F上运行。我担心编译器多久将基于软件的double学放在诸如**float_var1=3.0*int_var/float_var_2;(3.0insteadof3.0f)**我担心我会错过其中一些双常数。我怎样才能找到所有出现的较慢的double学?使用sourceryGCC或IAR禁用double或生成错误/警告即可。请指导我实现目标的正确方法。 最佳答案 HowcanIlocatealloccurrencesofslowerdouble-precisionmath?Disabl