草庐IT

str2double

全部标签

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++ - char * 和 const_cast<char*>(string.c_str()) 有什么区别

我使用外部库来处理两个应用程序之间的udp(OSC)通信。为了格式化将要发送的消息,库需要一个char*但我从UI中得到一个字符串,我必须转换它。当我处理代码的其他部分时,udp部分是硬编码的:char*endofMess="fromsetEndMess";并且工作正常。我认为使用我的字符串很容易让它工作并写道:std::strings="fromsetEndMess";char*endofMess=const_cast(s.c_str());但与第一个例子不同,我收到的消息格式正确,现在我只收到乱码。有人知道它可能来自哪里吗?谢谢!马修编辑:我使用的代码:每次OSCVal发送消息的方

c++ - C++ 中 double 和 DOUBLE 的区别

我想知道double之间有什么区别?和DOUBLE(来自#include)在C++中。在Java中有很多关于它的问题,但那是一种完全不同的语言。是DOUBLE只是double的Windows包装类,或者是其他东西?它们有什么不同的优势吗? 最佳答案 double是C++关键字,而DOUBLE是实现定义的typedef。例如,如果我将包含在MSVC++的项目中,IDE显示DOUBLE在WTypesbase.h中定义喜欢:typedefdoubleDOUBLE; 关于c++-C++中doub

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

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

c++ - size_t 数据类型可以安全地用于 str.find() 吗?

我一直在查看字符串的find()函数的代码,它们将结果存储在数据类型为size_t的变量中。然而,据我所知,size_t是一个无符号整数,如果find()没有找到预期的字符串,它会返回-1。例如,如果我有strings="asdf";size_ti=s.find("g")cout它给我4294967295。但是,如果我用int数据类型替换size_t,它会给我-1。奇怪的是,当我像这样进行比较时strings="asdf";size_ti=s.find("g")if(i==-1){do_something;}无论i是size_t还是int都有效。那我用哪个?int还是size_t?

c++ - 初始化 std::pair<double, std::array<std::pair<double, double>, 3>>

谁能建议以下代码中std::vector::push_back调用中std::make_pair调用的正确语法:#include#include#includeintmain(){typedefstd::pairPairType;std::vector>>myVector;doubleKey=0.0;PairTypePair1=std::make_pair(1.0,2.0);PairTypePair2=std::make_pair(3.0,4.0);PairTypePair3=std::make_pair(5.0,6.0);myVector.push_back(std::make_pa

c++ - 在不丢失信息的情况下将 double 转换为 int64_t 并返回

这个问题可能有人问过,但我搜索过,找不到答案。我正在实现一个玩具虚拟机,其中OpCodes采用以下形式:std::tuple//instructionop1,op2我正在尝试将一个double值打包到其中一个操作数中,并在处理它时再次读回它。这不能可靠地工作。doubled=...autoa=static_cast(d);autob=static_cast(a)//sometimes,b!=d有没有办法将double的位表示打包成int64_t,然后读回该位模式以获得与以前完全相同的double? 最佳答案 static_cast执

c++ - 如何计算 double 的平均值,使总误差最小?

假设我们有一个很长的double组,比如说,N==1000000。arrayarr;计算平均值有两种简单的方法。首先doubleresult=0;for(doublex:arr){result+=x;}result/=arr.size();当值的总和很大时,这可能不准确。float会失去精度。另一种方法是:doubleresult=0;for(doublex:arr){result+=x/arr.size();}当数字较小时,这可能会失去精度。是否有任何故障安全方法来计算float的简单平均值?仅使用标准库的解决方案值得赞赏。 最佳答案

c++ - 使用 Int 的初始化列表初始化 Long Double 的 vector

假设我有一个简单的类:classPvector{private:std::vectorpoint_list;public:Pvector(std::initializer_listcoords):point_list(coords){}Pvector(std::initializer_listcoords):point_list(coords){}};这将无法编译,因为longdouble模板化的std::vector无法从int类型模板化的初始化列表中初始化自身.然而,这很不方便,因为删除了第二个构造函数后,我无法在我的代码中执行以下操作:Pvectorpiece_movement(

c++ - 当字符串保存在一个集合中时,c_str() 是否仍然有效

我有一个旧项目需要维护,其中使用了constchar*。出于某种原因,我想保留大量运行时生成的字符串。所以我创建了一个全局变量std::set来保存这些字符串。当生成新字符串时,除了添加到集合中外,我还会返回并发送newString.c_str(),它将保存在其他地方。例如。std::setg_stringDB;voidArchieveString(AStruct*container,constchar*temporaryString){autoit=g_stringDB.emplace(temporaryString);container->validString=it->first