草庐IT

Double-precision_floating-point_f

全部标签

c++ - if(double) 有效的 C++ 吗?

我刚遇到这行代码:if(lineDirection.length2()){...}其中length2返回一个double。让我有点困惑的是0.0等同于0、NULL和/或false。这是C++标准的一部分还是未定义的行为? 最佳答案 这是一个非常标准的行为(bool转换)$4.12/1-"Anrvalueofarithmetic,enumeration,pointer,orpointertomembertypecanbeconvertedtoanrvalueoftypebool.Azerovalue,nullpointervalue,

c++ - 如何以最高精度存储 double

我有点难以存储具有最大可用精度的数字:doubletmp=569.232306826889043804840184748172760009765625L;我正在尝试将其打印在屏幕上:printf("%0.52f\n",tmp);这就是我所拥有的:569.2323068268890400000000000000000000000000000000000000这是我能达到的最大精度吗?附言我正在使用VisualStudio2008 最佳答案 double通常存储在IEEE754binary64中格式。binary64具有52位精度,而不

c++ - 从 double 到 unsigned int 的转换

我遇到了将值从Double转换为int的问题。我尝试运行以下代码:intmain(){doubleval_d=6.25e-05;cout从double到int的转换可能会删除小数部分,但应保留整数部分是吗?我得到的输出是:1600015999那么为什么这里的o/p不同呢?这只发生在软呢帽上。在Windows和Ubuntu上它工作正常。(两个输出都是16000)我调整了上面的代码并得到了以下结果:intmain(){doubleval_d=6.25e-05;cout新输出是160001600016000 最佳答案 当源文本“6.25e

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++ - 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++ - 为什么在我的 64 位机器上 double 和 long double 完全一样?

这个问题听起来像是针对初学者的,但是当我发现这个问题时,我想我要么是初学者,要么我的comp缺少一些东西:intmain(){cout程序输出:881515我以为longdouble是10个字节,有18个十进制数字,而double是8个字节,有15个数字,但看来我错了。为什么会这样?在64位机器上使用MSVC2010。 最佳答案 如您所知,在MSVC++中,longdouble是double的同义词。显然这是为了利用仅限于64位操作的SSE/SSE2/SSE3指令集。另见here获取更多信息。