C++ 浮点运算后舍入不一致

C++ 浮点运算后舍入不一致,c++,rounding-error,C++,Rounding Error,以下面的例子(使用人为数字): 在多次运行中,d的值不一致。以下是两种人为完成数学运算的方式: 执行1: 9.0/2.0==4.49999 圆形和圆形(4.49999…)==4 执行2: 9.0/2.0==4.5 圆形和圆形(4.5)=5 我希望在不同的执行和不同的机器上一致地获得相同的值。在上面的例子中,4或5的结果很好,只要它总是4或总是5,这可能是愚蠢的,有很多未解决的细节,但我想当你知道你想要的解决方案的精度时,它可以工作 #include <stdio.h> #includ

以下面的例子(使用人为数字):

在多次运行中,
d
的值不一致。以下是两种人为完成数学运算的方式:

执行1:

9.0/2.0==4.49999

圆形和圆形(4.49999…)==4

执行2:

9.0/2.0==4.5

圆形和圆形(4.5)=5


我希望在不同的执行和不同的机器上一致地获得相同的值。在上面的例子中,
4
5
的结果很好,只要它总是
4
或总是
5
,这可能是愚蠢的,有很多未解决的细节,但我想当你知道你想要的解决方案的精度时,它可以工作

#include <stdio.h>
#include <math.h>

int main(int argc, char * argv[]) {
  float i = 5.3 / 4.7;
  float j = 5.3 / 4.7;

  printf("i %f \n", round(i * 10000.0) / 10000.0);
  printf("j %f \n", round(j * 10000.0) / 10000.0);


  return 0;
}
#包括
#包括
int main(int argc,char*argv[]){
浮点数i=5.3/4.7;
浮动j=5.3/4.7;
printf(“i%f\n”,四舍五入(i*10000.0)/10000.0);
printf(“j%f\n”,圆形(j*10000.0)/10000.0);
返回0;
}

如果有很多未解决的细节,这可能会很愚蠢,但我想,如果您知道所需解决方案的精度,它可能会起作用

#include <stdio.h>
#include <math.h>

int main(int argc, char * argv[]) {
  float i = 5.3 / 4.7;
  float j = 5.3 / 4.7;

  printf("i %f \n", round(i * 10000.0) / 10000.0);
  printf("j %f \n", round(j * 10000.0) / 10000.0);


  return 0;
}
#包括
#包括
int main(int argc,char*argv[]){
浮点数i=5.3/4.7;
浮动j=5.3/4.7;
printf(“i%f\n”,四舍五入(i*10000.0)/10000.0);
printf(“j%f\n”,圆形(j*10000.0)/10000.0);
返回0;
}

您的输入是什么?你的预期产量是多少?Convert()函数做什么?在示例代码中,两个变量a和b没有初始化。或者,如果他们确实被初始化了,你能展示一下真正的代码吗?有帮助吗?我对你的问题进行了大量的编辑,因为似乎很多用户都感到困惑。我试图用另一种方式重申你的问题。如果我误解了您的问题,或者您不喜欢我的更改,请将其还原。我真的不知道为什么会关闭。甚至在我编辑之前,这个问题就包含了期望的/实际的行为<代码>转换很容易从上下文中找到。我也找不到一个好的答案。据我所知,这是一个好问题。你的意见是什么?你的预期产量是多少?Convert()函数做什么?在示例代码中,两个变量a和b没有初始化。或者,如果他们确实被初始化了,你能展示一下真正的代码吗?有帮助吗?我对你的问题进行了大量的编辑,因为似乎很多用户都感到困惑。我试图用另一种方式重申你的问题。如果我误解了您的问题,或者您不喜欢我的更改,请将其还原。我真的不知道为什么会关闭。甚至在我编辑之前,这个问题就包含了期望的/实际的行为<代码>转换很容易从上下文中找到。我也找不到一个好的答案。据我所知,这是个好问题。哦。。。你只需要一个整数。那么“圆”就是你所需要的。。。对于c。。。对于C++,我想STD::()是(你所需要的),正如其他人所说的。这是C答案,而不是C++ +哦…你只需要一个整数。那么“圆”就是你所需要的。。。对于c。。。对于C++,我想STD::()是(你所需要的),正如其他人所说的。这是C答案,而不是C++。