飞镖:能够加2但不能加1

时间:2018-01-08 14:19:55

标签: integer dart integer-overflow arbitrary-precision

我在DartPad中测试了这个代码段:

import 'dart:math';

void main() {
  int ov = pow(2, 53);
  ov = ov + 0;
  print('$ov');
  ov = ov + 1;
  print('$ov');
  ov = ov + 2;
  print('$ov');
}

我是Dart的新手。我试图溢出变量,但显然Dart有任意的精确整数。输出有点令人惊讶:

9007199254740992
9007199254740992
9007199254740994

为什么我可以添加2但添加1没有任何效果?

如果您想查看,请the pad

1 个答案:

答案 0 :(得分:4)

当dart编译为JS时,它会转发 num int double )的JS Number类型。如果您在JS控制台中尝试相同的操作,您将得到相同的结果:

> Math.pow(2, 53)
9007199254740992
> Math.pow(2, 53) + 1
9007199254740992
> Math.pow(2, 53) + 2
9007199254740994