dart 程序给出不准确的值

6xfqseft  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(157)

下面的程序计算262 + 261 + 260 + ... + 21 + 20。
使用double类型存储sum

double sum = 0;
  for (int i = 0; i < 63; i++) {
    sum += pow(2.0, i);
    // print("i : $i sum : $sum");
  }
  print(sum);

输出:

9223372036854776000.0

很明显,答案应该是一个odd数,但sum是:9223372036854776000.0是一个even数。
当我将sum改为int数据类型时,它会给出准确的结果:
使用int类型存储sum

int sum = 0;
for (int i = 0; i < 63; i++) {
  sum += pow(2.0, i).toInt();
  //print("i : $i sum : $sum");
}
print(sum);

输出:

9223372036854775807

当数据类型为double时,为什么求和会产生错误的结果?

qxgroojn

qxgroojn1#

因为double的有效位只有53位,而你的数字有63位。
52存储在主有效数字段中,53位二进制小数的前导1位是隐式的。

相关问题