草庐IT

float-rounding

全部标签

c++ - 如何使用 avx 指令将 float vector 转换为 short int?

基本上,我如何使用AVX2内在函数编写与此等效的内容?我们这里假设result_in_float是__m256类型,而result是shortint*或短整数[8]。for(i=0;i我知道可以使用__m256i_mm256_cvtps_epi32(__m256m1)内在函数将float转换为32位整数,但不知道如何将这些32位整数进一步转换为16位整数。而且我不仅想要那个,还想要将这些值(以16位整数的形式)存储到内存中,我想全部使用vector指令来完成。在互联网上搜索,我发现了一个名为_mm256_mask_storeu_epi16的内在函数,但我不确定这是否能解决问题,因为我找

javascript - C# 十进制到 C++ float 和 javascript 数字

我有一个用C#编写的TCP服务器。我必须编写两个客户端(c++和javascript)。我可以在c#客户端中反序列化十进制(16字节-128位),但我无法反序列化其他语言。小数不要太大,我可以使用float或double。序列化小数时:MemoryStreamcombinedMessage=newMemoryStream();decimald=2135102.06m;using(BinaryWriterwriter=newBinaryWriter(combinedMessage,encoding)){writer.Write(d);}byte[]message=combinedMess

c++ format cout with "right"and setw() for a string and float

我正在尝试格式化一个“cout”,它必须显示如下内容:Result$34.45金额($34.45)必须在右侧索引上,并带有一定数量的填充或在特定列位置结束。我尝试使用cout但是,它是为“$”字符串设置宽度,而不是为字符串加金额设置宽度。关于处理此类格式有什么建议吗? 最佳答案 您需要将"$"和值34.45组合成单独的字符串。像这样尝试:#include#include#include#includeusingnamespacestd;intmain(){stringstreamss;ss

牛客周赛 Round 32 F.小红的矩阵修改【三进制状态压缩dp】

原题链接:https://ac.nowcoder.com/acm/contest/75174/F时间限制:C/C++1秒,其他语言2秒空间限制:C/C++262144K,其他语言524288K64bitIOFormat:%lld题目描述小红拿到了一个字符矩阵,矩阵中仅包含"red"这三种字符。小红每次操作可以将任意字符修改为"red"这三种字符中的一种。她希望最终任意两个相邻的字母都不相同。小红想知道,至少需要修改多少个字符?输入描述:第一行输入两个正整数n,m,代表矩阵的行数和列数。接下来的n行,每行输入一个长度为m的、仅由"red"这三种字符组成的字符串。1≤n≤41≤m≤1000输出描述

c++ - 具有 double 、 float 和整数数据类型的英特尔 MKL 矩阵产品性能

我正在试验英特尔MKL库,使用它们提供的Boost::uBLAS接口(interface)(包括mkl_boost_ublas_matrix_prod.hpp)执行矩阵乘法。我的数据只是整数,所以我尝试将我的矩阵模板类型更改为int并且性能下降,这似乎主要是由于代码仅使用单个CPU内核而不是我可用的12个。我在MKL文档中找不到任何内容来解释为什么整数没有使用MKL的OpenMP多线程功能(我猜他们根本没有使用MKL?)。此外,与float相比,我发现double的性能下降了50%。问题:为什么float和double之间存在差异?为什么我不能使用整数?这是我从下面的代码中得到的结果:

c++ - 写 foo(const float&) 是在浪费精力吗?

当传递像int或float这样的原始类型时,这样写是不是浪费了精力:foo(constfloat&);而不只是按值传递:foo(float); 最佳答案 为了花车?Yes,prettymuch.这里根本没有任何好处:float很小,复制不会比创建指针来实现引用慢。 关于c++-写foo(constfloat&)是在浪费精力吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/210

c++ - 为什么 mingw 知道 round() 但 visual studio 编译器不知道

有效的示例代码,由gcc编译但不由VS编译器编译:#includeintmain(){floatx=1233.23;x=round(x*10)/10;return0;}但出于某种原因,当我在VisualStudio中编译时出现错误:C3861:'round':identifiernotfound我什至包括了cmath正如这里有人建议的那样:http://www.daniweb.com/software-development/cpp/threads/270269/boss_loken.cpp147-error-c3861-round-identifier-not-found只有gcc有

c++ - Node C++ 插件 - 当类型化数组 (Float32Array) 作为参数传递时,如何访问它?

我想使用V8Float32Array数据结构。我该如何初始化它?我也对直接内存访问数据感兴趣。这怎么可能? 最佳答案 已更新现在最好的方法是使用助手Nan::TypedArrayContents.assert(args[i]->IsFloat32Array());Localmyarr=args[i].As();Nan::TypedArrayContentsdest(myarr);//Nowusedest,e.g.(*dest)[0]node-canvas中有一个很好的例子.原始答案,显示了帮助程序为何有用v8API现在变化很快,所以

c++ - 模板代码中的 float 或 double

下面的例子可能看起来很荒谬,但它是一个更大的高性能代码的一部分,在这个代码中所介绍的技术是有意义的。我提到这一点是为了防止有人怀疑XY问题——很可能不是。我有一个带有模板化/编译时操作数的函数:templateintmul(intx){returnM*x;}现在我想对double做同样的事情,这是-当然-不允许的:template//youcan'tdothat!intmul(doublex){returnM*x;}所以为了在编译时仍然放入double,我只看到以下解决方案://createmyconstantsstructSevenPointFive{staticconstexprd

c++ - AVX/SSE 回合向下 float 并返回整数 vector ?

有没有办法使用AVX/SSE获取浮点vector、向下舍入并生成整数vector?所有的floor内部方法似乎都产生了一个浮点的最终vector,这很奇怪,因为四舍五入产生了一个整数! 最佳答案 SSE可以从FP转换为整数,您可以选择截断(向零)或当前舍入模式(通常是IEEE默认模式,最接近平局舍入为偶数。像nearbyint(),与round()不同,其中tiebreak是远离0。如果您需要x86上的舍入模式,youhavetoemulateit,perhapswithtruncateasabuildingblock。)相关说明为