浮点型功能

Float type functionality

本文关键字:功能 浮点型      更新时间:2023-10-16

可能的重复项:
浮点数总和不精确

所以我有代码:

#include <iostream>
using std::cout;
using std::endl;
int main () {
   float x = 0.0001;
   float y = 0;
   for (int i=0; i < 10000; i++) {
      y += x;
   }
   cout << y << endl;
   return 0;
}

我预计输出为 1,但我得到 1.00005,怎么来?我需要更改什么才能使"1"保持代码或多或少相同?

二进制浮点数不能精确地表示每个可能的十进制有理数。 如果不能,将发生舍入误差。 您会看到这些舍入误差的累积。

int main () {
   int x = 1;
   int y = 0;
   for (int i=0; i < 10000; i++) {
      y += x;
   }
   cout << y/10000.0 << endl;
   return 0;
}

整数是精确的,浮点数通常不是。如果您需要精确性,不使用十进制库的最简单方法是将数学保留在整数域中,直到您需要它。