C++ C++;当操作数小于129时,浮点值不变

C++ C++;当操作数小于129时,浮点值不变,c++,floating-point,C++,Floating Point,在这里,我从浮点变量中减去128.0和129.0两倍 #include "stdafx.h" #include<stdlib.h> //is this the problem? Or am i doing something wrong? int main() { float d1=3.0e9; printf("\n before: %f \n",d1); for(int i=0;i<2000000;i++) d1=d1-128.0; //doesnt change!

在这里,我从浮点变量中减去128.0和129.0两倍

#include "stdafx.h"
#include<stdlib.h> //is this the problem? Or am i doing something wrong?
int main()
{

float d1=3.0e9;
printf("\n before: %f \n",d1);
for(int i=0;i<2000000;i++) d1=d1-128.0; //doesnt change!    
printf("\n after : %f \n",d1);
for(int i=0;i<2000000;i++) d1=d1-129.0; //does change!
printf("\n after2: %f \n",d1);

//is 129 is the minimum step for sub/add ? Isnt this wrong? 
//Is this about exponential part 10^9 ?
getchar();
return 0;
 }
#包括“stdafx.h”
#包括//这是问题所在吗?还是我做错了什么?
int main()
{
浮点数d1=3.0e9;
printf(“\n在:%f\n之前”,d1);

对于(int i=0;i这是因为您的初始值。浮点只能容纳少量数字,因此它不能表示运算结果,并将其舍入到最接近的值。

使用
double
而不是
float

然后学习“精度”的概念

类型
float
适用于大约9位小数。32位float的完整描述如下:


我们可以通过观察a的解剖结构来了解发生了什么。IEEE754格式中的值
3.0E9
0x4F32D05E
,指数值为31(您可以用来查找该值)


现在尾数还有23个亚单位二进制数字。这意味着最小的增量,即尾数相邻值之间的差值,是一个二进制刻度为31的数字−23=8。因为128是27,我们看到它小到可以从尾数的末尾掉下来,而129大到可以看到。

文本的屏幕截图——说真的吗?我按printscreen复制文件比写3快floats@tuğrulbüyükıkık,你应该打开快速编辑模式,用鼠标复制文本。或者直接点击单击并使用菜单进入“选择”模式。右键单击命令窗口标题栏,然后选择“属性”。快速编辑模式有一个复选框。用鼠标左键选择文本,鼠标右键复制到剪贴板。谢谢。我将在下一个问题中尝试此选项谢谢你的慷慨回答