草庐IT

floating-point-conversion

全部标签

c++ - 从 float 到 double 和从 double 到 float 的精度损失?

floatfv=orginal_value;//original_valuemaybeanyfloatvalue...doubledv=(double)fv;...fv=(float)dv;fv应该等于original_value吗?任何精度都可能丢失? 最佳答案 SHOULDfvbeequaltooriginal_valueexactly?Anyprecisionmaybelost?是的,如果dv的值在两者之间没有变化。来自C99规范中的Conversion6.3.1.5RealFloatingtypes部分:Whenafloat

c++ - 我可以控制调试器窗口中显示的 float 和 double 变量的位数吗?

在VisualStudio2012中,我正在寻找一种方法来自定义自动、局部变量和监window口中浮点类型的默认显示。我熟悉NativeVisualizer(Natvis)实用程序,但没有看到任何调试器格式化工具来完成此操作。同样,我不知道有什么方法可以覆盖任何原始类型的默认显示(除了启用十六进制)。目标是创建显示字符串,其中针对与点、几何vector等对应的类型扩展了较少的数字,但在扩展类型时仍会显示所有精度。因此,例如我可能有一个点类型的变量显示为(0.000,1.234,2.429)而不是m_x=0.00000000,m_y=1.234245213...在中间Autos窗口的列。

c++ - 简单的 C++ : How to overload the multiplication operator so that float*myClass and myClass*float works

classMyClass;intmain(){floata=5;MyClassc1;MyClassc2=a*c1;MyClassc3=c1*a;}如何重载乘法运算符以便a*c1和c1*a都能工作? 最佳答案 像这样:MyClassoperator*(floatx,constMyClass&y){//...}MyClassoperator*(constMyClass&y,floatx){//...}第二个也可以是成员函数:classMyClass{//...MyClassoperator*(floatx);};前2个选项作为类范围之外

c++ - 将字符串、整数和 float 序列化为字符数组,以便在没有库的情况下联网

我想通过网络传输数据,但我不想使用任何外国库(标准C/C++就可以)。例如:unsignedintx=123;chary[3]={'h','i','\0'};floatz=1.23f;我想要这个charxyz[11];数组。注意:要通过网络传输它,我需要unsignedint的网络字节顺序(htonl函数),然后我需要以某种方式将float序列化为IEEE754形式(互联网上有很多函数),我知道这一点。如何将它们放入xyz数组中,端到端整齐排列,以便我可以将其用作我的socket+send()函数的缓冲区?显然我有反向函数(ntohl,和一个反向IEEE754)来把它们弄出来,但我也需

c++ - 处理 float 的精度问题

我想知道是否有一种方法可以克服精度问题,这个问题似乎是我的机器内部float表示的结果:为了清楚起见,问题总结为://stris"4.600";atof(str)is4.5999999999999996doublemw=atof(str)//Thevariablesusedinthecolumnscalculationbeloware:////mw=4.5999999999999996//p=0.2//g=0.2//h=1(integer)intcolumns=(int)((mw-(h*11*p))/((h*11*p)+g))+1;在转换为整数类型之前,列计算的结果是1.9999999

c++ - Clang 问题 : implicit type conversion at construction time

概要我正在努力使C++11代码与Clang兼容,并遇到了GCC>=4.6接受代码而Clang>=3.1不接受的情况。Clang认为候选构造函数不可行。详情这里是一个精简的例子来说明这个问题:#includetemplatestructT;templatestructT{typedefTsuper;constexprT(){}templateT(Args&&...){}};templatestructT:T{typedefTsuper;Headhead;T(Headarg):super(),head(std::move(arg)){}};structvoid_type{constexpr

c++ - 模板类中 float 和 double 文字的函数特化

我正在尝试找到一种解决方案,以便在模板类方法中使用常量数字文字。我正在制作一些与float或double类型一起使用的数学模板类。问题在于文字因数据类型而异(例如,“0.5f”表示float,“0.5”表示double)。到目前为止,我想出了两个解决方案。第一个的一些假设代码:templateclassSomeClass{public:TdoSomething(Tx);};templatefloatSomeClass::doSomething(floatx){floaty=0.5f;/**Docomputations...*/returnx;}templatedoubleSomeCla

c++ - 如何使用 fmt 库格式化带十进制逗号的 float ?

我想使用fmt库格式化float。我尝试使用小数分隔符“,”来格式化float,但没有成功:#include#include#includestructnumpunct:std::numpunct{protected:chardo_decimal_point()constoverride{return',';}};intmain(void){std::localeloc;std::localel(loc,newnumpunct());std::cout输出为1.234567。我想要1,234567更新:我浏览了fmt库的源代码,认为float的小数点分隔符是hardcoded,不符合当

c++ - g++ 在不使用 -Wconversion 的情况下将 double/float 转换为无符号整数时发出警告

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:g++-Wallnotwarningaboutdouble->intcast根据问题here,从double/float到无符号整数的直接转换是不可移植的。我发现我的代码中有一些情况会发生这种情况,如果发生这种情况,我想告诉g++警告我,但我找不到这样的选项。有谁知道是否可以选择这样做?注意:我确实看到了-Wconversion,但它也会警告我不关心的所有其他类型的转换(比如将int转换为unsignedint,根据标准这是可移植的)。编辑:这是我希望看到警告的代码示例:doubledblNumber=-23

c++ - Int to Float to Int转换精度损失

最近,我写了一个小程序,并使用2个不同版本的mingw32(在Windows8上)编译了它。令人惊讶的是,我得到了两个不同的结果。我试着拆解它,但发现没什么特别的。谁能帮帮我?谢谢。exe文件:https://www.dropbox.com/s/69sq1ttjgwv1qm3/asm.7z结果:720720(gcc版本4.5.2),720719(gcc版本4.7.0)编译器标志:-lstdc++-static代码如下:#include#includeusingnamespacestd;intmain(){inta=55440,b=13;a*=pow(b,1);cout程序集输出(4.5