草庐IT

double_bits

全部标签

c++ - double 浮点比较

我在这里有点困惑-当double值存储为不透明(二进制)字段时,它们的比较是否仍能正常工作?我面临的问题是double包含符号的前导位(即正数或负数),当它们存储为二进制数据时,我不确定它是否会被正确比较:我想确保比较能够正常进行,因为我使用double作为keytuple(e.g.)inLevelDB的一部分我想保留正数和负数的数据局部性。LevelDB仅使用不透明字段作为键,但它确实允许用户指定他/她自己的比较器。但是,我只是想确保我不指定比较器,除非我绝对需要://Three-waycomparisonfunction://ifab:positiveresult//else:ze

c++ - 对定义为 vector<double> 的矩阵进行排序

假设我有一个方阵A尺寸n,定义为std::vector.std::vectorA(n*n);矩阵的元素以通常的方式访问:doublea_ij=A[i*n+j];我需要根据第一列对矩阵的行进行升序排序。qsort函数允许我使用数组和函数指针来完成它,但我想找到一种方法来使用vector和std::sort来完成它.另请注意,出于性能原因,我不想将矩阵定义为vector的vector。编辑:我传给qsort的函数:staticintcomparisonFunction(constvoid*firstRow,constvoid*secondRow){if(((double*)firstRow

c++ - 64bit和32bit进程互通boost::message_queue

大家好,我目前正在尝试找出一种在64位进程和32位进程之间传递数据的方法。由于它是一个实时应用程序并且两者都在同一台计算机上运行,​​因此我很难使用共享内存(shm)。当我在寻找一些使用shm的同步机制时,我对boost::message_queue有所感触。但是它不起作用。我的代码基本上如下:发件人部分message_queue::remove("message_queue");message_queuemq(create_only,"message_queue",100,sizeof(uint8_t));for(uint8_ti=0;i接收部分message_queuemq(ope

c++ - clang 3.5 constexpr 不一致 - 使用 double 而不是 int 时出错

回答后usingboostmathconstantsinconstexpr并建议OP对constexpr变量使用boost的模板化函数而不是非模板化常量来平息clang错误,我决定尝试看看什么条件会重现clang中的错误。让我们尝试复制boost的宏扩展到的内容:namespacedouble_constants{staticconstdoublename=25;}staticconstexprdoubleSEC3=double_constants::name;这会产生以下错误(按照Coliru进行)clang++-std=c++1y-O2-Wall-pedantic-pthreadm

c++ - 对本周大师的理解 #67 : Double or Nothing

最近,我正在阅读帖子:DoubleorNothingfromGOTWbyHerbSutter我对以下程序的解释有点困惑:intmain(){doublex=1e8;while(x>0){--x;}}假设这段代码在某台机器上运行1秒。我同意这样的代码很愚蠢的观点。但是,根据问题的解释,如果我们将x从float更改为double,那么在某些编译器上,它将保留计算机运行到永远。解释基于标准中的以下引用。引自C++标准第3.9.1/8节:Therearethreefloatingpointtypes:float,double,andlongdouble.Thetypedoubleprovide

c++ - strtoull() 的输出在转换为 double 然后返回 uint64_t 时失去精度

考虑以下几点:#include#includeintmain(){std::cout打印:0xffffffffffffffff0x00xffffffffffffffff第一个数字只是转换ULLONG_MAX的结果,从字符串到uint64_t,按预期工作。但是,如果我将结果转换为double然后回到uint64_t,然后打印0,第二个数字。通常,我会把这归因于float的精度不准确,但更让我困惑的是,如果我转换ULLONG_MAX来自uint64_t至double然后回到uint64_t,结果是正确的(第三个数字)。为什么第二个和第三个结果不一样?编辑(@RadoslawCybulski

c++ - 将 float 转换为 double

将float转换为double的代价是多少?它是否像int到long的转换一样微不足道?编辑:我假设一个平台,其中float是4个字节,double是8个字节 最佳答案 平台注意事项这取决于用于float计算的平台。对于x87FPU,转换是免费的,因为寄存器内容是相同的——您有时可能付出的唯一代价是内存流量,但在许多情况下甚至没有流量,因为您可以简单地使用该值而无需任何转换。x87在这方面实际上是一个奇怪的野兽-很难正确区分float和double,因为使用的指令和寄存器是相同的,不同的是加载/存储指令和计算精度本身是使用状态位控制

c++ - 如何将分数纪元时间戳( double )转换为 std::chrono::time_point?

我有一个小数纪元时间戳,表示为double,我想将其转换为适当的std::chrono::time_point。纪元是自1/1/1970以来的常用UNIX纪元。我知道存在std::chrono::system_clock::from_time_t,但是time_t没有小数部分。使用C++11方法执行此操作的最佳方法是什么?这个问题与unixtimestamptoboost::posix_time::ptime有关,除了它要求的是C++11而不是它的Boost版本。 最佳答案 假设纪元与已知的时钟类型相同,您可以使用具有double表

c++ - C++11 类型推断如何决定 float 或 double ?

考虑这个类型推断的例子:autovar=1.0;在C++11类型推断下,它的计算结果是float还是double?可以控制这种行为吗? 最佳答案 它将被评估为double是的,您可以控制它。在标准ISO-14882:2011中,2.14.4float文字,第1点:Thetypeofafloatingliteralisdoubleunlessexplicitlyspecifiedbyasuffix.ThesuffixesfandFspecifyfloat,thesuffixeslandLspecifylongdouble.Ifthes

c++ - 比 double 更精确的 float 据类型?

在我的项目中,我必须计算double元素矩阵的除法、乘法、减法和加法。问题是,当矩阵的大小增加时,我的输出精度会受到极大影响。目前,我对每个元素使用double,我认为它使用8字节的内存并且具有16位的精度,无论小数点位置如何。即使对于大尺寸矩阵,所有元素占用的内存也在几千字节的范围内。所以我可以负担得起使用需要更多内存的datatypes。所以我想知道哪种数据类型比double更精确。我试着在一些书中搜索,我可以找到longdouble。但我不知道它的精度是多少。如果我想要比这更高的精度怎么办? 最佳答案 根据维基百科,80位“I