为何Python与Dart的pow()函数相同输入输出结果不同?
在Dart中获取和Python一致的pow(17,18)结果
问题原因
- Dart的
dart:math库中的pow()函数返回double类型,而double的精度上限为2^53(约9×10¹⁵),17¹⁸的准确值远超这个范围,导致精度丢失,返回近似值6665467901046659617。 - Python的
int是任意精度类型,可精准存储超大整数,因此能得到精确结果14063084452067724991009。
解决方案
方法1:使用BigInt的pow方法
Dart的BigInt支持任意精度整数运算,直接调用其pow方法即可获得准确结果:
void main() { var result = BigInt.from(17).pow(18); print(result); // 输出 14063084452067724991009 }
方法2:使用int的pow方法(Dart 2.10及以上版本)
从Dart 2.10开始,int类型新增pow方法,运算结果在int范围内时返回int,超出范围自动返回BigInt:
void main() { var result = 17.pow(18); print(result); // 输出 14063084452067724991009 }
若你的Dart版本低于2.10,建议升级版本或采用BigInt的实现方式。
内容的提问来源于stack exchange,提问作者Vivek Rai
相关产品推荐
相关产品推荐

