草庐IT

floating-point-conversion

全部标签

C++:清除单精度 float 的位

我目前正在将一个最初用于OpenCL的程序转换为C++,但我在其中的一个特定部分遇到了一些麻烦。上述程序中常用的表达式之一涉及采用32位float,将其转换为整数(即​​实际上不是将其四舍五入为int,而是将相同的数据解释为int-想想reinterpret_cast),执行一些操作对它施展魔法,然后将其转换回float(再一次,不是实际转换,而是对相同数据的重新解释)。虽然这在OpenCL中运行良好,但对于C++和gcc,这违反了严格的别名规则,如果启用优化会破坏程序,并且根据架构,可能涉及昂贵的加载命中存储,因为浮点寄存器和整数寄存器是分开的。我已经能够有效地避免这些表达式中的大部

C++, Linux : error: conversion from ‘boost::unique_future<void>’ to non-scalar type ‘boost::shared_future<void>’ requested. 如何绕过它?

我尝试使用boostthreadfutures.所以如图here我们可以得到sharedfuture来自packagedtask.所以我在linux上尝试这样的功能:templatevoidpool_item(boost::shared_ptr>pt){boost::shared_futurefi=pt->get_future();//error//...但调用它时出错:../../src/cf-util/thread_pool.h:Inmemberfunction‘voidthread_pool::pool_item(boost::shared_ptr>)[withtask_retu

c++ - 如何在没有 float / double 的情况下生成均匀分布和高斯分布的伪随机数?

我必须在没有任何float/double操作和函数的汇编器上编写伪随机生成器,例如sin/cos、sqrt等。所以我不能用一般的方法来做到这一点。我也有随机数限制:00-0F。我该怎么做?据我了解,我首先需要生成统一编号。我是这样做的:x=(13*x+7)%16;(但它有一个问题-这是有史以来最统一的分布。如果它生成15个数字并且我知道所有这些数字,我可以100%的概率说第16位,因为在16(模块)的周期中没有重复。然后,我需要将这些数字重新生成为高斯分布。我在互联网上找到了这个解决方案,但它不起作用。for(i=0;i我应该用它做什么?(我对概率论一窍不通)我得到gx和gy的输出:U

c++ - Rust 中的 "sequence point"/"sequenced-before"规则是什么?

Rust中的规则是什么,类似于这里描述的规则http://en.cppreference.com/w/cpp/language/eval_order对于C++?目前我凭经验发现,1)函数的参数按直接顺序求值2)所有有副作用的内置操作(=、+=、-=等)返回单位,因此很难(但可能)组成表达式,这将在C++中显示UB。一个例子:letmuta=1i;letb=2i;letc=3i;letd=(a=b)==(a=c);//Whatisa?(aisactually3)3)似乎函数调用的顺序与C++中的一样4)似乎内置操作的顺序就像它们是函数(方法)调用一样,即求值顺序与运算符优先级相关我的结论

c++ - 在 float 中获取计时秒数

在http://en.cppreference.com/w/cpp/chrono的示例中秒值是在double中获得的。这是我想要的行为。然而,这似乎依赖于时间点减法产生代表秒的值的隐含假设。我找不到任何内容来解释为什么在实际未指定时间单位时持续时间会产生浮点秒数。根本不使用auto,有人可以展示如何显式获取浮点类型的时间单位(例如秒),或者向我指出有关为什么上述转换代表秒的文档或解释吗?有问题的转换本质上是:std::chrono::time_pointstart=std::chrono::system_clock::now();std::chrono::time_pointend=s

c++ - std::chrono::time_point 无效值

boost/std::chrono::time_pointmy_time_point(/*invalidvalue*/);我需要存储一个无效/无意义/标记值。我怎么可能那样做? 最佳答案 您可以使用boost::optional(或std::optional,如果您支持C++17)表示chrono::time_point的无效状态:#include#includeintmain(){usingmy_clock=std::chrono::system_clock;usingmy_time_point=std::chrono::time

c++ - 如何从两个字节组装一个 float ?

我目前正在做一个项目,我需要读出一个DHT11humidityandtemperaturesensor.MCU和串行设备之间的通信非常低级,但我设法将测量值(湿度+温度)作为长度为4的字节数组接收(第5个字节是校验和):我从DHT11传感器收到的值:-byte[0]=humidityintegerpart-byte[1]=humiditydecimalpart-byte[2]=temperatureintegerpart-byte[3]=temperaturedecimalpart-byte[4]=checksumofthefirstfourbytes我现在想将byte[0]和byte

c++ - 不使用 USES_CONVERSION 宏

我的这段代码在C++项目中使用了USE_CONVERSION宏...我想知道这是否写得好(不是我写的),如果没有USES_CONVERSION和W2A宏,是否有更好的方法。STDMETHODIMPCInterpreter::GetStringVar(BSTRbstrNamespace,BSTRbstrVar,BSTR*pbstrValue){USES_CONVERSION;try{if(!pbstrValue)returnE_POINTER;char*pszNamespace=W2A(_bstr_t(bstrNamespace).operatorwchar_t*());char*psz

C++ 错误 : Conversion to Non-Scalar Type

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭10年前。我似乎在下面的代码段中遇到了一个特殊的错误(忽略多余的头文件和空白的主函数,我只是想将这个问题隔离到一个可编译的.cpp文件中以便在这里发布)。它说从“[我定义的某些类型]”到非标量类型“[我定义的某些类型]”的错误转换。这个特定示例中的代码应该将一组字符串列表作为一个输入参数(命名输入),并将对字符串列表的引用作为另一个(命名输出)并计算最长的公共(p

c++ - 将 8 个字符从内存加载到 __m256 变量中作为打包的单精度 float

我正在优化图像上的高斯模糊算法,我想用__m256内在变量替换下面代码中浮点缓冲区[8]的使用。什么系列的指令最适合这项任务?//unsignedchar*new_imageisloadedwithdata...floatbuffer[8];buffer[x]=new_image[x];buffer[x+1]=new_image[x+1];buffer[x+2]=new_image[x+2];buffer[x+3]=new_image[x+3];buffer[x+4]=new_image[x+4];buffer[x+5]=new_image[x+5];buffer[x+6]=new_i