以下程序计算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时,为什么求和生成错误的结果?

推荐答案

因为double的有效位只有53位,而你的数字有63位.

52存储在主有效数字字段中,53位二进制小数的前导1位为隐式.

1 sign bit, 11 exponent bits, and 52 significand bits

Dart相关问答推荐

Dart中使用set表达式的switch语句

如何在 Flutter Web 中动态更改 App Title?

如何在 Flutter 上实现事件监听器或委托

Flutter Drawer 作为单独的小部件不允许修改宽度

如何将指针事件发送到堆栈中的低级子级

如何使用Flutter dio 下载文件?

Flutter 如何移动文件

如何根据用户在Flitter中的时间显示问候,如早上好、下午好或晚上好

Dart VM 的性能与 Node.js 相比如何?

如何解决Id does not exist错误?

将Dart嵌入到应用程序中

如何在 Flutter 中让 Android 状态栏变亮

Flutter - 在 POST 请求中处理状态码 302

带有 Dart 的 CORS,我如何让它工作?

如何在 Dart 中获取字符串的字节数?

可以在 Dart 中的抽象类中声明静态方法吗?

Dart 的服务器端框架

你如何在 Dart 中对异常进行单元测试?

在 Dart 中获取集合/列表中数字总和的最简洁方法是什么?

列出dart中双点(.)的使用?