草庐IT

img_float

全部标签

c++ - 在 L1/L2 中快速合并 4K float 的排序子集

在现代(SSE2+)x86处理器上合并多达4096个32位float的数组的排序子集的快速方法是什么?请假设:整个集合的大小最多为4096个项目子集的大小有待讨论,但我们最初假设在16-256之间通过合并使用的所有数据最好适合L1L1数据缓存大小为32K。16K已经用于数据本身,因此您可以使用16K所有数据都已经在L1中(尽可能高的置信度)-它刚刚被排序操作所有数据都是16字节对齐的我们希望尽量减少分支(原因很明显)可行性的主要标准:比L1LSD基数排序更快。我很想看看是否有人知道根据上述参数执行此操作的合理方法!:) 最佳答案 这

C++ 模板方法 : Why Node<int> is fine, 但不是 Node<float>?

我很少使用模板。我不知道为什么我在下面的代码中看到push的构建错误Node的方法|BuildErroris:Nomatchingfunctiontocallpush.Node*push方法还是不错的。Node*head1=NULL;push(&head1,1);templatestructNode{Tdata;Node*next;};templatevoidpush(Node**head,Tdata){Node*tmp=*head;Node*newNode=NULL;//createNode(data);if(tmp==NULL){*head=newNode;}else{while(

c++ - 在某些情况下,std::is_floating_point 为 float 返回 false

在某些情况下,请参见下面的一个示例,std::is_floating_point正在返回false对于float.#include#include#includeintmain(){::std::cout()[::std::vector().size()])).name()()[::std::vector().size()])>::value){::std::cout来自GCC的输出fnotfloatingpoint在本例中,可以看到typeid认为::std::vector()[::std::vector().size()]作为float因为它返回正确的名称。还可以检查typeid(

c++ - 将float数组写入&追加到C++中的hdf5文件中的唯一数据集

我正在处理大量文件,对文件的每次处理将输出数千个float数组,并将将所有文件的数据存储在单个hdf5中的一个巨大数据集中,以进行进一步处理。目前,我对如何将数据附加到hdf5文件感到困惑。(上面代码中的注释)在上面的2个for循环中,如您所见,我想一次将1维浮点数组附加到hdf5中,而不是整体。我的数据以TB为单位,我们只能将数据附加到文件中。有几个问题:在这种情况下如何追加数据?我必须使用哪种功能?现在,我有fdim[0]=928347543,我尝试放入HDF5的无穷大标志,但运行时执行失败。有没有办法做到这一点?我不想计算每次的数据;有没有一种方法可以简单地继续添加数据而无需关心

c++ - 将 float 转换为字符串

如何在没有库函数sprintf的情况下将浮点整数转换为C/C++中的字符串?我正在寻找一个函数,例如char*ftoa(floatnum)将num转换为字符串并返回。ftoa(3.1415)应该返回"3.1415"。 最佳答案 根据SophyPal的回答,这是一个稍微更完整的解决方案,它考虑了数字零、NaN、无穷大、负数和科学记数法。尽管sprintf仍然提供更准确的字符串表示。/*DoubletoASCIIConversionwithoutsprintf.Roughlyequivalentto:sprintf(s,"%.14g",

c++ - 为什么双重优先于 float ?

关闭。这个问题需要更多focused.它目前不接受答案。想要改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion在我看到的大多数代码中,double最适合float,即使在不需要高精度时也是如此。由于有performancepenalties当使用双重类型(CPU/GPU/内存/总线/缓存/...)时,这种双重过度使用的原因是什么?示例:在计算流体动力学中,我使用的所有软件都使用double。在这种情况下,高精度是没有用的(由于数学模型中的近似值造成的误差),并且有大量数据需要移动,可以使用float将其减半。今

c++ - 生成下一个最大或最小的可表示 float ,无需位旋转

给定一个任意的有限float,有没有办法确定下一个可表示的float是什么?例如,给定1.0f,根据定义,下一个最大的可表示数是1.0f+std::numeric_limits::epsilon()。有没有一种方法可以为任何值合成一个epsilon-而不仅仅是1.0f-而无需求助于位旋转和/或机器如何表示浮点值的明确知识? 最佳答案 在C++11中,您使用std::nextafter()。缺少这一点,在C99系统上,您可以使用C数学库中的nextafterf、nextafter或nextafterl(对于类型float、double

C++ 声明独立于平台的 32 位 float

有没有办法在C++中声明32位浮点值-确保无论平台/编译器如何,它始终是32位?我可以对这样的整数做到这一点:#includeuint32_tvar;//32bitunsignedintegeruint64_tvar1;//64bitunsignedinteger有没有办法为花车做类似的事情?据我所知,floatvar;//Usuallyis32bit,butNOTGUARANTEEDtobe32bit是特定于实现的,不一定是32位的。(如果我错了,请纠正我)。我正在使用qt,所以如果有任何使用它的解决方案,我会接受它-我找不到类似quint16的float(qreal会根据平台更改大

c++ - float 与定点数 : what are the pros/cons?

浮点类型通过将有效数字和指数分别存储在单独的二进制字中来表示数字,因此它适合16、32、64或128位。定点类型用2个字存储数字,一个代表整数部分,另一个代表小数部分,负指数,2^-1、2^-2、2^-3等。float更好,因为它们在指数意义上具有更广泛的范围,但如果想要在某个范围内以更高的精度存储数字,例如仅使用-16到16之间的整数,因此使用更多位来保存数字,则不是超过基数。在性能方面,哪一个性能最好,或者是否存在一些比另一个更快的情况?在视频游戏编程中,每个人都使用float是因为FPU让它更快,还是因为性能下降可以忽略不计,还是他们自己制作固定类型?为什么C/C++中没有固定类

c++ - 打印 float ,保持精度

我正在编写一个程序,它打印浮点文字以在另一个程序中使用。为了保持原始float的精度,我需要打印多少位?由于float具有24*(log(2)/log(10))=7.2247199十进制数字精度,我最初的想法是打印8位数字就足够了。但如果我不走运,那些0.2247199会分布在7个有效数字的左侧和右侧,所以我可能应该打印9个十进制数字。我的分析正确吗?对于所有情况,9个十进制数字是否足够?像printf("%.9g",x);?在7或8就足够的情况下,是否有一个标准函数可以将float转换为具有该值所需的最小小数位数的字符串,所以我不打印不必要的数字?注意:我不能使用十六进制浮点文字,因