草庐IT

img_float

全部标签

c++ - STL中的 float 比较,BOOST

STL或Boost中是否有一套通用的简单比较函数?我发现的那个总是需要模板参数,和/或实例化一个结构模板。我正在寻找语法如下的内容:if(is_equal(x,y)){...}可以实现为:templateboolis_equal(constT&x,constT&y){return(fabs(x-y)::eps);}编辑:我将运算符更改为等于。(见下面的评论) 最佳答案 我不知道有哪个库可以做到这一点,也许是因为它像一行代码一样简单,或者也许是因为它被遗忘了......尽管如此,您确定要在整个应用程序中为给定值的给定类型设置epsil

c++ - 奇怪的 uint32_t 到 float 数组转换

我有以下代码片段:#include#includestaticconstsize_tARR_SIZE=129;intmain(){uint32_tvalue=2570980487;uint32_tarr[ARR_SIZE];for(intx=0;x(arr[x]);}printf("%s\n",arr_dst[ARR_SIZE-1]==arr_dst[ARR_SIZE-2]?"OK":"WTF??!!");printf("magic=%0.10f\n",arr_dst[ARR_SIZE-2]);printf("magic=%0.10f\n",arr_dst[ARR_SIZE-1]);r

c++ - 关闭 float 的科学记数法

我正在尝试以标准符号显示数字例如:floatf=1230000.76结果是,1.23e+006 最佳答案 在iomanip中发现有两件事必须包含在内。第一个是fixed,第二个是setprecision你需要写:std::coutfixed禁用科学计数法,即1.23e+006并且fixed是一个粘性操纵器,因此如果您想恢复为科学计数法,则需要禁用它。 关于c++-关闭float的科学记数法,我们在StackOverflow上找到一个类似的问题: https:/

c++ - x/a 与 float 的 x*(1/a) 相同吗?

使用floata=...;和floatinva=1/a;是x/a与相同x*inva?这个案例是什么:unsignedi=...;floatv1=static_cast(i)/4294967295.0f;floatscl=1.0f/4294967295.0f;floatv2=static_cast(i)*scl;对于所有无符号整数,v1是否等于v2? 最佳答案 isv1equaltov2forallunsignedintegers?是的,因为4294967295.0f是2的幂。当除数是2的幂时,除以倒数和乘以倒数是等价的(假设倒数的计

c++ - 我必须使用 0.f 初始化 float 吗?

当我在我的程序中初始化float变量时,我通常有这样的vector:Vectorforward(0.f,0.f,-1.f),right(1.f,0.f,0.f),up(0.f,1.f,0.f)(vector只是3个float,如structVector{floatx,y,z;};)这看起来多更容易阅读:Vectorforward(0,0,-1),right(1,0,0),up(0,1,0)我必须使用float来初始化我的float变量吗?当我使用整数(或double)初始化float时,我是否会丢失任何东西或招致某种惩罚? 最佳答案

c++ - 16 位 float 和 GL_HALF_FLOAT

我正在寻找/编写16位float的C++实现,以与OpenGL顶点缓冲区(纹理坐标、法线等)一起使用。到目前为止,这是我的要求:必须是16位(显然)。必须能够使用GL_HALF_FLOAT上传到OpenGL顶点缓冲区。必须能够表示超出-1.0-+1.0的数字(否则我只会使用标准化的GL_SHORT)。必须能够与普通32位float相互转换。算术运算无关紧要-我只关心存储。速度不是主要问题,正确性才是。这是我到目前为止的界面:classhalf{public:half(void):data(0){}half(consthalf&h):data(h.data){}half(constuns

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)来把它们弄出来,但我也需