我想确定(在C++中)一个float是否是另一个float的乘法逆数。问题是我必须使用第三个变量来做到这一点。例如这段代码:floatx=5,y=0.2;if(x==(1/y))cout将输出:“他们不是……”这是错误的,这段代码:floatx=5,y=0.2,z;z=1/y;if(x==z)cout会输出:“他们是……”这是对的。为什么会这样? 最佳答案 浮点精度问题这里有两个问题,但都来自同一个根您无法精确比较float。您不能精确地减去或除以它们。你不能精确地为他们计算任何东西。对它们进行的任何操作都可能(并且几乎总是会)给结
我的程序经常需要执行以下计算:给定:N是一个32位整数D是一个32位整数abs(N)D!=0X是任意值的32位整数查找:X*N/D作为一个舍入整数,X缩放为N/D(即10*2/3=7)显然我可以直接使用r=x*n/d,但我经常会从x*n得到溢出。如果我改为执行r=x*(n/d),那么我只会得到0或x,因为整数除法会丢弃小数部分。然后是r=x*(float(n)/d)但在这种情况下我不能使用float。准确度会很好,但不如速度和确定性函数重要(在相同的输入下总是返回相同的值)。N和D目前已签名,但如果有帮助,我可以解决它们始终未签名的问题。适用于任何X值(以及N和D,只要N目前我正在使用
#include#includeintmain(){printf("%f\n",FLT_MAX);}来自GNU的输出:340282346638528859811704183484516925440.000000VisualStudio的输出:340282346638528860000000000000000000000.000000C和C++标准是否允许这两种结果?还是他们要求特定的结果?请注意,FLT_MAX=2^128-2^104=340282346638528859811704183484516925440。 最佳答案 我认为
其中哪些代码有UB(具体来说,违反了严格的别名规则)?voida(){std::vectorv(sizeof(float));float*f=reinterpret_cast(v.data());*f=42;}voidb(){char*a=newchar[sizeof(float)];float*f=reinterpret_cast(a);*f=42;}voidc(){char*a=newchar[sizeof(float)];float*f=new(a)float;*f=42;}voidd(){char*a=(char*)malloc(sizeof(float));float*f=r
我这里写了一个使用std::map的小程序,如下。intmain(){mapm1;m1.insert(pair(10,15.0));//step-1m1.insert(pair(12.0,13));//step-2cout我为mapm1创建了一个以int类型作为键、float类型作为值(键值)对的map创建了一个普通的int-float对并插入到map中。创建了一个交叉浮点整数对并插入到map中。现在我知道隐式转换正在使这对插入到map中。这里我只是不希望发生隐式转换并且应该给出编译器错误。当我们尝试执行第2步类型操作时,我必须在此程序/映射中进行哪些更改以使编译器标记错误?
我说了两件事:std::numeric_limits::max()+(asmallnumber)给予:std::numeric_limits::max().std::numeric_limits::max()+(alargenumber喜欢:std::numeric_limits::max()/3)提供信息。为什么会有这种差异?1或2是否会导致OVERFLOW并因此导致未定义的行为?编辑:测试代码:1.floatd=std::numeric_limits::max();floatq=d+100;cout2.floatd=std::numeric_limits::max();floatq
我正在用C++制作一个游戏,其中有一辆可以在舞台上移动的坦克。坦克有一个角度(float,以度为单位,我假设当他的大炮指向右侧时坦克处于0º),一个速度(float),并且有一个称为“deltaT”(float)的时间常数。当玩家将坦克向前移动时,我使用三角函数和位置随时间的物理方程(我的意思是X(t),我不知道英文怎么说)来计算新坦克的舞台坐标。这是我的问题:由于从float到int的转换,不考虑最接近零的值。所以,在某些角度,坦克看起来是旋转的,但在不同的方向移动。这就是我的代码的作用:1-首先,我通过使用坦克移动的角度来分离其分量X和Y中的速度:floatspeedX=this-
我想在不丢失或添加任何单精度数字的情况下将浮点值存储到字符串中。例如,如果我的浮点值为23.345466467,我希望我的字符串具有str="23.345466467"精确数字。我尝试使用带有%f的CString格式函数。它只给出前6个精度。或者如果我使用%10,如果我的浮点值的精度小于10,它会增加一些垃圾精度。我想在我的字符串中获取精确的浮点值。如何做到这一点? 最佳答案 请参阅http://randomascii.wordpress.com/2012/03/08/float-precisionfrom-zero-to-100-
Boost连接可用于连接字符串容器,可选地由分隔符字符串分隔,如下例所示:Agoodexampleforboost::algorithm::join我的STL技能很弱。我想知道是否有任何方法可以对数字容器(float、double、整数)使用相同的函数?似乎应该有一些一两行来适应其他类型。还有STL的复制功能,这里有一个很好的例子:Howtoprintoutthecontentsofavector?但我不喜欢它在每个元素之后添加分隔符字符串的方式。我只想使用boost。 最佳答案 当然,您可以结合boost::algorithm::
如何从.txt文件中读取float。根据每行开头的名称,我想读取不同数量的坐标。float由“空格”分隔。示例:三角形1.2-2.43.0结果应该是:floatx=1.2/floaty=-2.4/floatz=3.0该文件有更多不同形状的线条,可能更复杂,但我想如果我知道如何做其中一个,我可以自己做其他的。到目前为止我的代码:#include#includeusingnamespacestd;intmain(void){ifstreamsource;//buildaread-Streamsource.open("text.txt",ios_base::in);//opendatai