浮点数学运算后四舍五入不一致

时间:2019-05-29 07:27:39

标签: c++ rounding-error

以下面的示例(带有伪造的数字)为例:

double a = 9.0, b = 2.0;
double c = a / b;
int d = RoundAndCastToInt(c);

在多次运行中,d的值不一致。这是两种人为设计的数学运算方式:

  

执行1:

     

9.0 / 2.0 == 4.49999 ...

     

RoundAndCastToInt(4.49999 ...)== 4

     

执行2:

     

9.0 / 2.0 == 4.5

     

RoundAndCastToInt(4.5)== 5

我想在不同的执行程序和不同的机器上始终如一地获得相同的值。在以上示例中,只要始终 4始终 { {1}}。

1 个答案:

答案 0 :(得分:-1)

这可能很愚蠢,但有很多未解决的细节,但是我想当您知道所需解决方案的精度时,它就可以工作...

#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;
}