草庐IT

double-byte

全部标签

c++ - 在不同机器之间使用 float / double 时我应该知道什么?

我听说不同CPU上的float/double存在很多问题。如果我想制作一款对所有内容都使用float的游戏,我如何才能确保每台机器上的float计算完全相同,以便我的模拟在每台机器上看起来完全一样?我还担心写入/读取文件或将浮点值发送/接收到不同的计算机。必须进行哪些转换(如果有)?我需要100%确定我的浮点值的计算结果完全相同,因为即使计算结果稍有不同,也会导致完全不同的future。这甚至可能吗? 最佳答案 除了范围限制之外,标准C++没有规定任何关于浮点类型的细节,并且可能某些数学函数(如正弦函数和指数函数)必须正确到一定的精

c++ - 将 vector<int> 分配给 vector<double> 安全吗?

这个问题在这里已经有了答案:C++convertvectortovector(2个答案)关闭去年。要为某个计算初始化变量,我必须从整数数组中为它们赋值。所以我这样做:vectorvd;intai[N];//Filledsomewhereelsevd.assign(ai,ai+N);这适用于gcc4.6.1Linux。但它总是正确的吗?或者我应该回到常青树:vd.resize(N);for(inti=0;i感谢您的澄清!

c++ - 在 C++ 中转换大整数 <-> double

为了好玩,我正在用C++编写自己的长算术库,它已经完成了,我什至用那个库实现了几个Cryptogrphic算法,但仍然缺少一件重要的事情:我想转换double(和float/长double)到我的号码,反之亦然。我的数字表示为一个可变大小的无符号长整型数组加上一个符号位。我试图用谷歌找到答案,但问题是人们很少自己实现这些东西,所以我只找到关于如何使用JavaBigInteger等的东西。从概念上讲,这相当简单:我取尾数,将其移动指数指定的位数并设置符号。在另一个方向上,我截断它以使其适合尾数并根据我的log2函数设置指数。但我很难弄清楚细节,我可以尝试一些位模式并将其转换为double

c++ - 模棱两可的调用 : int to double or bool

我有一个参数类,我重载了构造函数以接受bool值或double值。当你给它一个int时,它无法构建:errorC2668:'Parameter::Parameter':ambiguouscalltooverloadedfunctioncouldbe'Parameter::Parameter(std::string,std::string,double)'or'Parameter::Parameter(std::string,std::string,bool)'我相信我有两个选择:使用int默认值重载将我的变量显式转换为double我有很多参数,其中一些是无符号长整型、float等(在多

c++ - double float 的显示及其比较

序言我正在研究一个为不懂浮点运算的人开发的系统。出于这个原因,float比较的实现不会暴露给使用该系统的人。目前float的比较是这样发生的(由于遗留原因,这不能改变)://Ifeithernumberisnotfinite,dodefaultcomparisonif(!IsFinite(num1)||!IsFinite(num2)){output=(num1==num2);}else{//Getexponentsofbothnumberstodetermineepsilonforcomparisontmp=(OSINT32*)&num1+1;exp1=(((*tmp)>>20)&0x

c++ - 为什么我的 double 可以包含低于机器 epsilon 的值?

我正在使用double求解一个方程,我得到的是-7.07649e-17而不是0。我同意它非常接近,我可以说它是相等的,但是I'vereadthatthemachineepsilonfortheC++doubletypeis2^-52这比我得到的值大。那么为什么我的值比机器epsilon低?为什么该值不四舍五入为零?这没什么大不了的,但是当我进行逻辑测试时,我的值似乎不为零... 最佳答案 这个故事中有两个不同的常量。一个是epsilon,它是一个最小值,当添加到1.0时会产生不同于1.0的值。如果将较小的值添加到1.0,您将再次得到

c++ - 编译器使用的 double 表示的显式规范

最近遇到visual-c++好像不是IEEE754的问题兼容,而是使用subnormalrepresentation.也就是说,其中的doublefloat没有通常表示的1个符号位、11个指数位和52个显式存储的有效小数位,见下文。由于gcc和clang是兼容的,因此非常需要一致的跨平台行为我想知道是否可以强制visual-c++使用正常表示。或者让gcc和clang使用次正规表示当然也可以解决问题。不同双重表示的问题可以在visual-c++中重现,gcc和clang使用以下代码:#include#includeintmain(){try{std::stod("8.097571188

c++ - Swig:如何包装 double&(double 通过引用传递)?

我正在使用SWIG从Python访问C++代码。我如何优雅地包装一个函数,该函数返回通过引用传递的变量中的值voidset(double&a){a=42.;}我不知道该怎么做。在最好的情况下,我将能够在Python中使用带有Pythonfloat的函数:>>>b=2.>>>set(b)>>>printb42.0目前它给了我一个TypeError:inmethod'TestDouble_set',argument2oftype'double&'。 最佳答案 这样做:你的swig接口(interface)文件:%include%appl

c++ - 解析 double 的普通 python 列表

解析这样一行的最佳方法是什么(元素数量不固定):[0.0125,2.9518e+02,1.2833e+00,-3.5302e-04,1.2095e+01,1.0858e-01,1.2112e-04,1.1276e+03]#comments在C++中获取double的std::vector?我已经这样做了:vectorread_line(stringline){vectorcoefficients_line;//eraseallbefore[andallafter]size_tfound1=line.find("[");if(found1==string::npos)cerrcoeffi

c++ - 从模板函数返回 double 或 complex<double>

我正在编写一些函数模板来重载*矩阵类的运算符。我用double类型的矩阵做了很多工作和complex.是否可以编写一个返回正确类型的模板函数?例如:templatematrixoperator*(constTa,constmatrixA){matrixB(A.size(1),A.size(2));for(intii=0;ii我想要返回类型V由T*U的自然结果决定.这可能吗?编辑:后续question我提出的问题收到的答案提供了适用于此处的额外信息。 最佳答案 在C++11中,您可以使用替代函数声明语法:#include//forde