草庐IT

double-dispatch

全部标签

c++ - boost::lexical_cast 和 double——奇怪的行为

为什么当我写"2.01"和"2.02"时,下面的代码会给我不同的结果?#include#include#includeintmain(){conststd::stringstr="2.02";try{constdoubleb=boost::lexical_cast(str)*100.0;std::cout(b);std::cout输出double:202int:202但是如果我将"2.02"更改为"2.01"它会给我以下输出:double:201badlexicalcast:sourcetypevaluecouldnotbeinterpretedastarget为什么?我正在使用Vis

c++ - 使用 std::complex<double> 作为 std::map 键

如何使用复数作为map中的键?这是一个无法编译的小例子:#include#includeintmain(){std::complexzero=0.0;std::map,int>theMap;return(theMap.count(zero));}我可以毫无错误地创建map,但是任何方法(例如,上面的count调用以及find、[]运算符、insert等)都会生成编译时错误。这绝对是我理解的问题,因为我使用clang和g++得到了类似的结果。看起来编译器无法比较两个复数。我创建了所有比较运算符(例如booloperator),它适用于比较复数(只要你不介意3为真,这对map应该没问题),

c++ - Boost multiprecision 失败,因为 complex 的实现试图在 _Isinf 或 _Isnan 等内部函数中转换为 double

我需要一个类BSD许可的C(++)多精度库,支持复数,所以我尝试了boost。以下代码失败:#include#includeusingnamespaceboost::multiprecision;std::complex(1.0,2.0)/std::complex(1.0,2.0)在VisualStudio2012中出现错误C2440,因为complex的实现试图在_Isinf或_Isnan等内部函数中强制转换为double。这是我的错误吗?我怎样才能解决这个问题?有更好的库吗? 最佳答案 来自C++1126.4/2:Theeffe

c# - 使用 CLI 将 C# double 组传递给 C++ 函数

是的,需要的东西听起来很简单,但事实证明这是一个真正的痛苦。我在C#中有一些GUI代码(注意我以前从未使用过C#但熟悉语法)并且我有C++代码与它交互使用CLI.在C#中,我想创建一个double组,并将其发送到我的C++代码。我使用下面的代码作为传递数组的方式,并且它独立地符合要求。所以我从C#中将一个double[]数组传递给该函数。publicrefclassKernelWrapper{public:staticvoidImageNoiseFilter(System::IntPtrimageData,intimageWidth,intimageHeight,array^value

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++ - 自定义文字适用于 long double 但不适用于 double,并且适用于按值传递但不按引用传递

我正在试验C++自定义文字。当我将类型从longdouble类型更改为double或尝试通过引用传递时,我发现下面的简单函数停止工作很奇怪。起初我认为它与constexpr的使用有关,但事实似乎并非如此,因为如果它不在operator""上,这两种方法都可以正常工作,并且从operator""中删除constexpr不会删除错误。这些是语言设计中经过深思熟虑的决定,还是我的编译器(gcc4.8.2)无法处理的细微差别?//Conversionfunction,worksfinewithbothlongdoubleand//double,andwithorwithoutpassbyref

c++ - 成员引用基类型 'double' 不是结构或 union

我是C++的新手,不知道如何修复错误,非常感谢您的帮助发生错误的部分我试图将半径输入到cirArea[]数组中,但它似乎不起作用。这是我的部分代码:intmain(){Circle*area;doublecirRadius;intnumCircle;cout>numCircle;doublecirArea[numCircle];for(inti=0;i>cirRadius;cirArea[i].setRadius(cirRadius);}}对于setRadius():voidCircle::setRadius(doubler){if(r>=0)radius=r;else{cout所以这

c++ - 如果 constexpr 而不是标签分派(dispatch)

我想使用ifconstexpr而不是标签调度,但我不确定如何使用它。下面的示例代码。templatestructMyTag{staticconstintSupported=0;};templatestructMyTag{staticconstintSupported=1;};templatestructMyTag{staticconstintSupported=1;};classMyTest{public:templatevoiddo_something(Tvalue){//insteadofdoingthisboolsupported=MyTag::Supported;//Iwant

c++ - C++ 标准是否允许在没有开销的情况下实现 std::optional<double>

我刚刚看了cppcon谈论Bloombergdatum,变体类型使用IEEE754格式的冗余来编码存储在datum中的类型。所以我想知道C++标准是否允许实现通过使用相同的技巧更有效地实现std::optional。请注意,这需要有时存储在可选中的double二进制表示与传递给构造函数的double二进制表示不匹配。注意事项:我关心标准是否允许这样做,我知道大多数/所有实现都不会打扰。我知道IEEE754不是标准强制要求的,但它是允许的,并且可以通过实现检查。 最佳答案 标准要求,如果您将值存储在std::optional中,则该值

C++ String to double atof 转换丢失精度?

C++不是我的语言,所以请原谅这个简单的问题。我在从字符串到double的atof转换中失去了精度,有人可以帮忙吗?stringlAmount;stringlSuspendedInt="131663.51";stringlAccruedInterest="0.0";doubledSuspendedInt=atof(lSuspendedInt.c_str());//PROBLEMHERE?doubledAccruedInterest=atof(lAccruedInterest.c_str());doubledTotal=dSuspendedInt+dAccruedInterest;cha