草庐IT

floating-point-conversion

全部标签

c++ - 访问静态 constexpr float 成员时 undefined reference

此代码有效:structBlob{staticconstexprinta=10;};intmain(){Blobb;autoc=b.a;}但是如果我将int更改为float我会得到一个错误:structBlob{staticconstexprfloata=10.0f;};/tmp/main-272d80.o:Infunctionmain':main.cpp:(.text+0xe):undefinedreferencetoBlob::a'为什么我不能以这种方式使用constexprfloat?编译器:Ubuntuclang版本3.5.0-4ubuntu2(tags/RELEASE_350

C++ float vs double cout setprecision 奇怪之处(新手)

谁能解释为什么当我使用setprecision()时这两个相同值的变量可以输出不同的值?#include#includeintmain(){floata=98.765;doubleb=98.765;//std::couta的输出将为98.76,而b的输出将为98.77。 最佳答案 那些变量不具有相同的值。当您将98.765的字面值double硬塞进float时,它必须进行最佳匹配,并且会损失一些精度。如果将精度更改为50,您可以很容易地看到这一点,您还会看到即使是double也不能准确表示该值:98.7649993896484375

C++ 检查数字是否为 int/float

我是新来的。我在谷歌上找到了这个网站。#includeusingnamespacestd;voidmain(){//DeclarationofVariablefloatnum1=0.0,num2=0.0;//Gettinginformationfromusersfornumber1cout>num1;//Gettinginformationfromusersfornumber2cout>num2;cout我需要类似的东西,当用户输入字母字符时,它会显示一条错误提示,您应该输入数字。非常感谢任何帮助 最佳答案 首先,回答你的问题。这实

c++ - GNU C++ 中程序的奇怪行为,使用 float

看看这个程序:#include#includeusingnamespacestd;typedefpaircoords;doubledist(coordsa,coordsb){returnsqrt((a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second));}intmain(){coordsA=make_pair(1,0);coordsB=make_pair(0,1);coordsC=make_pair(-1,0);coordsD=make_pair(0,-1);cerr.precision(2

c++ - OpenCV 是否为 cv::Point 提供平方范数函数?

我必须根据距离阈值检查点之间的几个距离。我能做的是取阈值的平方并将其与(a-b)的平方范数进行比较,其中a和b是我正在检查的点。我知道cv::norm函数,但我想知道是否存在不计算平方根的版本(因此速度更快),或者我是否应该手动实现它。 最佳答案 注释来自OP:我接受了这个答案,因为这是使用OpenCV可以实现的最佳方法,但我认为在这种情况下最好的解决方案是使用自定义函数。是的,它是NORM_L2SQR:#include#includeusingnamespacecv;usingnamespacestd;intmain(){vect

c++ - 强制转换和赋值真的会剥夺 float 的额外精度吗?

我正在通读newC++FAQ我看到即使x==y为doublex,y;也有可能:std::cos(x)==std::cos(y)评估为false。这是因为机器可以有一个支持扩展精度的处理器,例如==的一部分是64位数字,而另一部分是80位数字。但是,下一个例子似乎不正确:voidfoo(doublex,doubley){doublecos_x=cos(x);doublecos_y=cos(y);//thebehaviormightdependonwhat'sinhereif(cos_x!=cos_y){std::cout据我readonen.cppreference.comhere:Ca

C++ : Ternary Operator (Conditional Operator) and its Implicit Type Conversion Rules

三元运算符的参数是否有隐式类型转换规则?三元运算符总是需要返回相同的类型。此类型仅由第二个和第三个参数(1st?2nd:3rd)确定,因此两个参数都转换为此类型。这种类型是如何确定的?更具体地说,我测试了一个例子:classpointclass{pointclass();pointclass(inti);//(pointclass)(int)operatorbool()const;//(bool)(pointclass)};我有一个类(pointclass),它支持从int进行隐式转换至pointclass和pointclass的隐式转换至bool.inti;pointclassp;b

c++ - Visual Studio 调试与发布版本 : comparing int and float missmatch

看看这个例子:#includeintmain(){inti=16777217;floatf=16777216.0;floatg=i;if(i==f)printf("eq\n");elseprintf("neq\n");if(g==f)printf("eq\n");elseprintf("neq\n");return0;}在Release模式、gcc或g++(4.9.2)中使用VisualStudio2010C++(VS),具有输出eqeq这对我来说是合理的:在第一次比较期间,i被隐式转换为float,其中尾数中的有效位被截断。因此,i和f都具有相同的位模式,相当于相等性。在第二个if中

c++ - 在一个简单的 Point 类中,是否有任何关于 getters/setters 而不是公共(public)成员变量的真正论据?

我有两个用于处理3d几何Point和Vector的简单类。它们都有3个坐标作为公共(public)成员变量,并定义了一些运算符,如+、-、*...。classPoint{public:doublex,y,z;//ctorandsomeoperators}classVector{public:doublex,y,z;//ctorandsomeoperators}是否有反对将坐标公开的真正理由?我永远不会将double更改为任何其他类型。我不想将x,y,z的值限制在一个特殊范围内,我也不想在设置坐标时检查任何内容。这些类位于库中,其他项目将使用该库。更新:对我来说,setters/gett

c++ - float 类型的默认参数 = 乱码

我在使用float类型的默认参数时遇到了一些问题:#include#includetemplatevoidfun(Tt=1e-05);templateinlinevoidfun(Tt){std::cout();_getwch();return0;}它打印-1.36867e-033而不是1e-05的等价物。这是怎么回事?我正在使用VC++10。编辑1:谢谢大家的回复。但转换默认参数在以下情况下不起作用:templatevoidfun(Tt=static_cast(1e-05));templateinlinevoidfun(Tt){std::wcout();fun();_getwch();