草庐IT

floating-point-conversion

全部标签

c++ - 使用 stringstream 打印四舍五入的 float

我有浮点变量“lmin”和“lmax”。我希望只显示4位有效数字。我目前正在使用我在网上找到的表格...stringtextout;stringstreamss;ss其中“输出”只是我编写的一个函数,用于解析字符串并将其打印到屏幕上。重要的一点是,我如何只将lmin和lmax的ROUNDED版本打印到ss? 最佳答案 使用std::setprecision指定小数点后的位数。#include#include#includeintmain(){doubled=12.3456789;std::stringstreamss;ss输出:12

c++ - 快速 log2(float x) 实现 C++

我需要在C++中快速实现log2(floatx)函数。我发现了一个非常有趣的实现(而且非常快!)#includeinlineunsignedlonglog2(intx){unsignedlongy;_BitScanReverse(&y,x);returny;}但此函数仅适用于输入中的整数值。问题:有什么方法可以把这个函数转换成double类型的输入变量吗?更新:我找到了这个实现:typedefunsignedlonguint32;typedeflongint32;staticinlineint32ilog2(floatx){uint32ix=(uint32&)x;uint32exp=(

c++ - 用一个字节表示一个 float

我有一种情况需要用单个char来表示float。这个'minifloat'需要表示的范围是0到10e-7,所以我们总是可以假设数字是+ve,指数-ve以节省空间。我考虑过的表示形式是3位指数和5位尾数(隐含1位),指数以10为底,即x=man*10^exp.要将float转换为我的迷你float,我计划使用frexp,并使用一些数学运算将基数2转换为基数10。这是明智的做法吗?或者有更好的方法来实现这一目标吗? 最佳答案 您是否真的需要该值是float(即随着值的缩放具有大致恒定的精度)?您将如何处理这些值?一个更简单(也更有效)的

c++ - 删除指向不完整类型的指针 'Point' ;没有调用析构函数

我有2个文件:Point.h:classPoint{intx;inty;char*name;public:Point(){name=newchar[5];}~Point(){delete[]name;}};和:Line.h:classPoint;classLine{Point*p;public:Line(){p=newPoint[2];.......}~Line(){delete[]p;}};但是当我编译时,我得到了下一个错误:deletionofpointertoincompletetype'Point';nodestructorcalled感谢任何帮助!

c++ - 对象成员的迭代器 "pointing"

我承认我很难对此做出合理的描述。我想不出一个好词来准确描述我正在寻找的东西。也许这可以称为切片迭代器。假设我有这样的东西:structS{inti;char*s;floatf;};std::vectorv(10);我正在寻找一种构造迭代器的方法,它将指向S的成员。我希望能够将它传递给std::min_element之类的东西,而无需在每种情况下都创建谓词。可能看起来像这样的东西:std::min_element(slicing_iterator(v.begin(),S::f),slicing_iterator(v.end(),S::f));我可以使用任何模板技巧来实现这一目标吗?或者它

c++ - 如何通过串行发送 float

在Arduino上通过串口发送float、double和int16的最佳方式是什么?Serial.print()只发送ASCII的值编码。但我想以字节形式发送这些值。Serial.write()接受字节和字节数组,但是将值转换为字节的最佳方法是什么?我试图将int16转换为byte*,但没有成功。我也使用了memcpy,但它使用了很多CPU周期。Arduino使用纯C/C++。这是一个ATmega328微Controller。 最佳答案 嗯。这个怎么样:voidsend_float(floatarg){//getaccesstoth

c++ - 这段代码是做什么的 : static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}};

#ifndefINFINITY#ifdef_MSC_VERunionMSVC_EVIL_FLOAT_HACK{unsigned__int8Bytes[4];floatValue;};staticunionMSVC_EVIL_FLOAT_HACKINFINITY_HACK={{0x00,0x00,0x80,0x7F}};#defineINFINITY(INFINITY_HACK.Value)#endif我目前正在开始使用Chipmunk物理引擎并在头文件中找到它INFINITY用于为物体设置无限动量,但是我不明白上面这段代码的作用! 最佳答案

c++ - 单精度 float 的第 24 个小数位在哪里? IEEE 754

今天我发现自己在做一些位操作,我决定稍微刷新一下我的浮点知识!在我看到这个之前,一切都很好:...23fractionbitsofthesignificandappearinthememoryformatbutthetotalprecisionis24bits我一遍又一遍地阅读它,但我仍然无法弄清楚第24位在哪里,我注意到一些关于binarypoint的东西,所以我假设它是尾数和指数。我不太确定,但我相信他的作者在谈论这一点:Binarypoint?|s------e-----|-------------m----------0-01111100-0100000000000000000

c++ - float <-> std::string 转换替代方案?

有没有atof、strtod、lexical_cast、stringstream或sprintf?即:快C++方式(std::string而不是char*)安全(无缓冲区溢出风险)有效(如果无法进行转换则返回NaN)没有外部图书馆(独立)我更喜欢this,一个简单的函数,经过优化,切中要点原因:atof和strtod是C函数,它们在失败时不返回NaN,我更喜欢使用std::string,所以我只是问是否有人已经为我可以使用的std::string编写了一些包装器(如果您不介意的话)。lexical_cast具有增强依赖性stringstream很慢sprintf存在缓冲区溢出风险及其C

c++ - 英特尔 TBB 中的原子 double / float

根据文档,atomic支持整数类型的T,枚举类型,或者指针类型。英特尔TBB是否正式支持float/double?我看过一些补丁here和RafSchietekathere,它可能/可能没有被合并到最新的4.0版本中。从我通读的补丁中,我注意到的唯一主要区别是将reinterpret_cast从整数类型添加到float/double。如果有人能澄清这一点,我将不胜感激。谢谢! 最佳答案 您可以轻松添加对基于64位和32位原子整数构建的float的支持。原子加载/存储/交换可以使用reinterpret_cast作为直接包装器实现,原